0

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

3 回答 3

1

你可能会遇到这个人遇到的同样问题。而且,他似乎已经修复了它。问题可能是关于 SSL 证书的协商以及 cURL 应该如何告诉服务器正在发送的证书是可以信任的。

于 2012-09-10T21:23:22.223 回答
1

检查错误:

$result = curl_exec($ch);
if (!$result) {
   die(curl_error($ch));
}

curl 不再附带“有效”CA 的内部列表,因此您无法验证远程站点的证书是否有效。您必须禁用证书验证,和/或自己安装 CA 列表

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

ps 从不假定对远程资源的操作成功 - 始终检查错误情况,并输出任何可用的错误消息。开灯,而不是在黑暗中四处乱撞,您可以省去很多麻烦。

于 2012-09-10T21:30:48.120 回答
0

您提供的代码实际上对我来说很好,无需修改。正如 RolfVandeKrol 所提到的,您可能遇到了 SSL 协商问题。要尝试修复该想法,您可以使用以下命令关闭 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;
}
于 2012-09-10T21:30:29.773 回答