首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHPCrawl未能创建SSL套接字

PHPCrawl未能创建SSL套接字
EN

Stack Overflow用户
提问于 2015-04-02 00:39:00
回答 2查看 790关注 0票数 2

我正在尝试使用PHPCrawl (http://sourceforge.net/projects/phpcrawl/)来拖网一个通过HTTPS交付的网站。

我可以看到,在PHPCrawlerHTTPRequest类(openSocket方法)中有对SSL的支持:

代码语言:javascript
复制
// If ssl -> perform Server name indication
  if ($this->url_parts["protocol"] == "https://")
  {
    $context = stream_context_create(array('ssl' => array('SNI_server_name' => $this->url_parts["host"])));
    $this->socket = @stream_socket_client($protocol_prefix.$ip_address.":".$this->url_parts["port"], $error_code, $error_str,
                                          $this->socketConnectTimeout, STREAM_CLIENT_CONNECT, $context);
  }

问题在于对stream_socket_client的调用--尽管它返回的是零error_code,并且没有error_str,但这个->套接字仍然是假的。

该方法的文档声明如下:

如果errno中返回的值为0,而函数返回FALSE,则表示错误发生在connect()调用之前。

(见http://php.net/manual/en/function.stream-socket-client.php)

因此,我尝试使用注释部分中提供的一个示例来修改流上下文,使用'stream_context_set_option‘将verify_host和verify_peer设置为false --这两者似乎都没有任何效果。

我不太精通PHP或网络的错综复杂之处-有人知道:

  • 什么条件(特别是)会导致此调用失败?或
  • 解决这个问题的办法?

我应该注意-我正在使用Facebook (HTTPS)作为测试服务器。

EN

回答 2

Stack Overflow用户

发布于 2015-04-07 01:02:19

我发现了问题-

  • PHP5.6.x默认启用对等验证,显然有时找不到必要的证书(见此错误报告)
  • 解决方法是返回到5.6之前的PHP版本
票数 2
EN

Stack Overflow用户

发布于 2018-10-10 10:08:25

旧话题,但我在使用PHPCrawler时遇到了同样的问题。对我起作用的是用户在sourceforge上所写的东西(来源:https://sourceforge.net/p/phpcrawl/bugs/86/#5993)。

您必须做的是将PHPCrawlerHTTPReqeust.class.php中第547行的PHPCrawlerHTTPReqeust.class.php调用重写为以下内容:

代码语言:javascript
复制
$context = stream_context_create(array(
    'ssl' => array(
        'SNI_server_name' => $this->url_parts["host"],
        'verify_peer' => false,
        'verify_peer_name' => false,
    )
));

希望这对将来的人有帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29403231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档