【问题标题】:Can't HTML Scrape Site Because Of SSL Error由于 SSL 错误,无法 HTML 抓取网站
【发布时间】:2013-03-29 06:49:19
【问题描述】:

我正在编写一个抓取脚本。它适用于大多数网站,但我无法访问特定的 SSL 网站。

这是我的代码:

if (!extension_loaded('openssl')){
    // not occurring
}

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://www.chase.com/');
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);

$result = curl_exec($ch);

if($result === false)
{
    $err = curl_error($ch);
    //$err = SSL read: error:00000000:lib(0):func(0):reason(0), errno 10054
}

$result 始终为FALSE,并显示以下错误消息:

SSL read: error:00000000:lib(0):func(0):reason(0), errno 10054

但它适用于其他具有 SSL 的网站。我还检查了phpinfo(),cURL 和 OpenSSL 处于活动状态。我正在使用 WAMP,有什么想法吗?

【问题讨论】:

  • 你为什么要抓取银行网站?

标签: php curl openssl web-scraping


【解决方案1】:

您需要设置一个用户代理。我测试了有和没有,它解决了这个问题。 Chase 似乎希望在请求中提供 UA。

所以添加这个:

curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; MSIE 9.0; WIndows NT 9.0; en-US)'); 

【讨论】:

  • 哇,你是对的:/谢谢! PS:我实际上是在设置一个用户代理(我只是删除了一些我认为没用的行)但我认为我没有正确设置它,你的工作!
  • @DanielStenberg 是的,我遇到了同样的错误。当然,我必须添加echo $err;
  • 好的,很酷。由于缺少用户代理,出现 SSL 错误似乎是不寻常的。谢谢!
【解决方案2】:

我通过使用以下 PHP 库解决了问题。

https://github.com/rmccue/Requests

[在你的基于 Linux 的服务器上使用这个库代码,它可能不适用于 xampp 或 wamp]

【讨论】:

    猜你喜欢
    • 2012-09-29
    • 2015-08-29
    • 1970-01-01
    • 2018-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多