PHP CURL获取https页面的内容

时间:2012-09-10 21:19:46

标签: php curl https

示例网址:     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);
}

3 个答案:

答案 0 :(得分:1)

您可能遇到了this guy遇到的同一问题。并且,他似乎修复了它。问题可能是关于SSL证书的协商以及cURL应如何判断服务器正在发送的证书,这可能是可信的。

答案 1 :(得分:1)

检查错误:

$result = curl_exec($ch);
if (!$result) {
   die(curl_error($ch));
}
很可能因为curl不再附带“有效”CA的内部列表这一事实而感到困惑,因此无法验证远程站点的证书是否有效。您必须自行禁用证书验证和/或安装CA列表

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

P.S。永远不要假设远程资源上的操作成功 - 始终检查错误情况,并输出任何可用的错误消息。你可以通过打开灯来节省很多人的头脑,而不是在黑暗中晃来晃去。

答案 2 :(得分:0)

您提供的代码实际上适合我,无需修改。您可能正在进行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;
}
相关问题