CURL и HTTPS, «Не удается разрешить хост»

Я пытаюсь получить содержимое страницы с помощью CURL. Страница, которая делает выборку, – https, а страница, которую она пытается извлечь, также https. Я получаю сообщение об ошибке «Не удалось разрешить хост» со всеми параметрами, которые я пытаюсь выполнить.

$c=curl_init(); curl_setopt($c, CURLOPT_URL,$url); //curl_setopt($c, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:xxx) Gecko/20041107 Firefox/xx"); curl_setopt ($c, CURLOPT_RETURNTRANSFER, TRUE); //curl_setopt($c, CURLOPT_SSL_VERIFYPEER, TRUE); //curl_setopt($c, CURLOPT_SSL_VERIFYHOST, TRUE); curl_setopt($c, CURLOPT_HEADER, FALSE); $html=curl_exec($c); if($html === false) { echo curl_error($c); } else { echo 'Operation completed without any errors'; } curl_close($c); 

Есть идеи?

Solutions Collecting From Web of "CURL и HTTPS, «Не удается разрешить хост»"

Может быть, проблема DNS?

Попробуйте свой URL против этого кода :

 $_h = curl_init(); curl_setopt($_h, CURLOPT_HEADER, 1); curl_setopt($_h, CURLOPT_RETURNTRANSFER, 1); curl_setopt($_h, CURLOPT_HTTPGET, 1); curl_setopt($_h, CURLOPT_URL, 'YOUR_URL' ); curl_setopt($_h, CURLOPT_DNS_USE_GLOBAL_CACHE, false ); curl_setopt($_h, CURLOPT_DNS_CACHE_TIMEOUT, 2 ); var_dump(curl_exec($_h)); var_dump(curl_getinfo($_h)); var_dump(curl_error($_h)); 

Я обнаружил, что CURL может решить использовать IPv6, и в этом случае он пытается разрешить, но не получает ответ IPv6 (или что-то в этом роде) и время ожидания.

Вы можете попробовать переключатель командной строки -4, чтобы проверить это.

В PHP вы можете настроить эту строку, установив это:

 curl_setopt($_h, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 ); 

У меня такая же проблема. Coudn't разрешить google.com. Там была ошибка где-то в php fpm, которую я использую. Перезапуск php-fpm решил это для меня.

Просто заметка, которая может быть полезна – у меня возникла эта проблема с Apache на моем ноутбуке (который подключается через Wi-Fi после запуска), и перезагрузка сервера (после подключения) исправила проблему. Думаю, в моем случае это может быть связано с запуском автономной сети apache и, возможно, замечанием, что DNS-запросы не срабатывают?

В Ubuntu есть текущая ошибка в glibc, которая может иметь этот эффект: https://bugs.launchpad.net/ubuntu/+source/glibc/+bug/1674733

Чтобы решить эту проблему, обновите libc и все связанные (пакеты, которые будут обновлены: libc-bin libc-dev-bin libc6 libc6-dev libfreetype6 libfreetype6-dev locales multiarch-support) и перезапустите сервер.

добавить yourlocalhost
ех. 127.0.0.1 cards.localhost в каталоге / etc / hosts. Теперь перезапустите сервер Apache

Нам нужно добавить сертификат безопасности хоста в файл php.ini. Для местной среды разработки мы можем добавить cacert.pem в ваш локальный php.ini.

do phpinfo (); и напишите свой путь php.ini и добавьте uncomment; curl.capath

curl.capath = path_of_your_cacert.pem

Вы получаете сообщение об ошибке, потому что вы, вероятно, делаете это на своей локальной серверной среде. Вам необходимо пропустить проверку сертификатов при выполнении вызова cURL. Для этого просто добавьте следующие параметры

 curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($c, CURLOPT_SSL_VERIFYHOST, 0); 

Возможно, вам придется включить часть HTTPS:

 curl_setopt($c, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($c, CURLOPT_SSL_VERIFYHOST, 2); 

И если вам нужно проверить (аутентифицировать себя), вам может понадобиться и это:

 curl_setopt($c, CURLOPT_USERPWD, 'username:password');