Пример url: https://www.tescogoldexchange.com/gold-calculator.aspx?carat=9&weight=1&ref=miniQuote
Я пытаюсь использовать cURL для получения содержимого страницы HTTPS.
Проблема в том, что я не могу захватить документ, и я понятия не имею, почему.
function download_page($url){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"); return curl_exec($ch); }
Вероятно, вы столкнулись с той же проблемой, с которой сталкивается этот парень . И, похоже, он исправил это. Вероятно, проблема заключается в согласовании SSL-сертификата и о том, как cURL должен сказать, что сертификат, отправляемый сервером, может быть доверен.
Проверьте наличие ошибок:
$result = curl_exec($ch); if (!$result) { die(curl_error($ch)); }
скорее всего, вас укусит тот факт, что завиток больше не поставляется с внутренним списком «действительных» ЦС и, следовательно, не может проверить сертификат удаленного сайта как действительный. Вам придется отключить проверку сертификата и / или установить список самих ЦС самостоятельно
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
ps никогда не предполагал, что операция на удаленном ресурсе преуспела – всегда проверяйте условия ошибки и выводите любые сообщения об ошибках. вы сэкономите себе много голов, крах, включив свет, вместо того, чтобы стучать в темноте.
Код, который вы предоставили, действительно отлично подходит для меня, без изменений. Возможно, у вас проблемы с поддержкой SSL, как упоминал RolfVandeKrol. Чтобы попытаться исправить эту идею, вы можете отключить проверку равных SSL с помощью:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
Чтобы увидеть, что происходит на самом деле, перед изменением вы можете использовать curl_getinfo($ch)
для просмотра всех возвращенных заголовков. Это должно дать вам знать, какой ответ вы используете для правильного диагноза.
Кроме того, вы можете изменить свою функцию, чтобы правильно закрыть ручку curl
с curl_close($ch);
, Попробуйте вместо return curl_exec($ch);
, с помощью:
... $contents = curl_exec($ch); curl_close($ch); return $contents; }