示例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;
}