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

我可以看到PHPCrawlerHTTPRequest类(openSocket方法)支持SSL:

// 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,但this-> socket仍然为false。

该方法的文档指出以下内容:



(请参阅http://php.net/manual/en/function.stream-socket-client.php)

因此,我尝试使用注释部分中提供的示例,使用“stream_context_set_option”将verify_host和verify_peer设置为false来修改流上下文-两者似乎都无效。

我不太精通PHP或复杂的网络-有人知道吗:
  • 什么情况(具体来说)会导致此调用失败?
  • 解决此问题的方法?

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

    最佳答案

    我发现了问题-

  • PHP版本5.6.x默认情况下打开对等验证,显然有时未找到necesarry证书(see this bug report)
  • 解决方法是回落到5.6
  • 之前的PHP版本

    关于php - PHPCrawl无法创建SSL套接字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29403231/

    10-12 06:08