PHP CURL获取https页面的内容


PHP CURL to get contents of a https page

示例url:https://www.tescogoldexchange.com/gold-calculator.aspx?carat=9&权重=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不再附带"有效"CA的内部列表,因此无法验证远程站点的证书是否有效。你必须禁用证书验证,和/或自己安装一个CA列表

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

p.s.永远不要假设对远程资源的操作成功-始终检查错误条件,并输出任何可用的错误消息。开着灯,而不是在黑暗中到处乱敲,你会省去很多麻烦。

您提供的代码实际上对我来说很好,无需修改。正如RolfVandeKrol提到的,您可能遇到SSL协商问题。要尝试修复这个想法,您可以使用以下工具关闭SSL对等验证:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

要查看实际发生了什么,在修改之前,可以使用curl_getinfo($ch)查看返回的所有标头。这应该让你知道你的脚本收到了什么样的响应来进行正确的诊断。

此外,您可能需要修改您的函数,以使用curl_close($ch);正确关闭curl句柄。尝试使用:而不是return curl_exec($ch);

    ...
    $contents = curl_exec($ch);
    curl_close($ch);
    return $contents;
}