Мне нужно сделать простой запрос GET для API запросов EC2 с обычной строкой запроса URL-адреса. Протокол HTTPS. Как отправить запрос с помощью PHP cURL.
Пример:
$url = "https://example.com"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); $result = curl_exec($ch); curl_close($ch); print_r($result);
CURLOPT_SSL_VERIFYPEER
Проверьте, является ли сертификат одноранговой сети действительным или недействительным / истек.
CURLOPT_SSL_VERIFYHOST цитирование из руководства php :
1, чтобы проверить наличие общего имени в SSL-сертификате. 2, чтобы проверить наличие общего имени, а также убедиться, что он соответствует указанному имени хоста.
Отправка запроса через curl на HTTPS-URL не так уж сложна с точки зрения кода PHP.
Что-то вроде этого должно отлично работать (я просто пробовал эту часть кода на своей машине, Windows, PHP 5.3) :
$url = 'https://.../...'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $data = curl_exec($ch); curl_close($ch); echo $data;
И он выводит результат отлично: то же самое, что я получаю в своем браузере при попытке получить доступ к URL https://
; за исключением CSS, конечно.
Вы можете взглянуть на страницу curl_setopt
функции curl_setopt
: есть много вариантов, и некоторые из них могут быть полезны в вашем конкретном случае 🙂
Здесь я использовал CURLOPT_SSL_VERIFYPEER
и CURLOPT_SSL_VERIFYHOST
; не уверен, что вам понадобятся те, у кого есть Amazon, но я должен был их использовать, иначе эта часть кода не сработала, но это может быть связано с тем, что сертификат, который я использую, сам по себе … Попробуйте с ними и без них, и вы быстро узнаете, нужны ли они вам.
Если вы хотите настроить CURL для слепого принятия сертификата, вы можете установить для параметра CURLOPT_SSL_VERIFYPEER значение false.
$url = 'https://www.example.com/abc'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Blindly accept the certificate curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $response = curl_exec($ch); curl_close($ch); var_dump($response);
Вы также можете использовать Zend Framework и адаптер cURL, чтобы помочь с этой задачей. Подробнее здесь