Подтвердить что ты не робот

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:x.x.x) Gecko/20041107 Firefox/x.x");
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);

Любые идеи?

4b9b3361

Ответ 1

Может быть проблема с 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)); 

Ответ 2

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

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

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

curl_setopt($_h, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );

Ответ 3

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

Ответ 4

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

Ответ 5

В 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) и перезапустите сервер.

Ответ 6

После того, как перепробовал все вышеперечисленное, пока не решил мою ошибку.

Но получил новое решение для этого и решил проблему.

На сервере, где вы собираетесь сделать запрос, должна быть запись вашего виртуального хоста.

sudo vim /etc/hosts

и вставить

192.xxx.x.xx www.domain.com

Причина, по которой вы делаете запрос от сервера к самому себе, чтобы разрешить ваш виртуальный хост или идентифицировать его, серверу потребуются вышеупомянутые вещи, иначе сервер не поймет ваш запрашивающий (исходный) хост.

Ответ 7

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

делать phpinfo(); и запустим путь php.ini и добавим uncomment; curl.capath

curl.capath = path_of_your_cacert.pem

Ответ 8

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

Ответ 9

Если вы сделаете это на Windows XAMPP/WAMP, то это, вероятно, не будет работать, как в моем случае.

Я решил проблему с настройкой решения Laravel Homestead/Vagrant для создания своей среды разработки (Ubuntu), в которую встроены: Nginx, PHP 5.6, PHP 7.3, PHP 7.2, PHP 7.1, MySQL, PostgreSQL, Redis, Memcached, Node... чтобы назвать только несколько.

Смотрите здесь для получения информации о том, как настроить окружающую среду - это действительно стоит усилий!

Laravel Homestead - это официальный, предварительно упакованный пакет Vagrant, который предоставляет вам прекрасную среду разработки, не требуя установки PHP, веб-сервера и любого другого серверного программного обеспечения на локальном компьютере. Больше не нужно беспокоиться о том, чтобы испортить вашу операционную систему! Бродячие коробки полностью одноразовые. Если что-то пойдет не так, вы можете уничтожить и заново создать коробку за считанные минуты!

Тогда вы можете легко переключать версии PHP или создавать новые виртуальные хосты, новые базы данных всего за несколько секунд.

Ответ 10

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

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

Ответ 11

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

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

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

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