Php fgets上的fsockopen https冻结

Php fgets上的fsockopen https冻结,php,https,amazon-ec2,fsockopen,Php,Https,Amazon Ec2,Fsockopen,我试图通过PHP-fsockopen连接到一个服务器,以最初获取基本身份验证的cookie,然后持续连接到响应的Location头中定义的流服务器 问题是我的代码在fgets上冻结,从未从目标服务器接收任何响应数据。我正在Amazon ec2实例的443端口上通过https进行连接。服务器通过服务器终端中的curl或chome浏览器连接良好 $this->conn = fsockopen('ssl://[destination_server]', 443, $errNo, $errSt

我试图通过PHP-fsockopen连接到一个服务器,以最初获取基本身份验证的cookie,然后持续连接到响应的Location头中定义的流服务器

问题是我的代码在fgets上冻结,从未从目标服务器接收任何响应数据。我正在Amazon ec2实例的443端口上通过https进行连接。服务器通过服务器终端中的curl或chome浏览器连接良好

  $this->conn = fsockopen('ssl://[destination_server]', 443, $errNo, $errStr, $this->connectTimeout);
  stream_set_blocking($this->conn, 1);

  fwrite($this->conn, "GET " . $urlParts['path'] . " HTTP/1.0\r\n");
  fwrite($this->conn, "Host: " . $urlParts['host'] . "\r\n");
  fwrite($this->conn, "Content-type: application/x-www-form-urlencoded\r\n");
  fwrite($this->conn, "Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5");    
  fwrite($this->conn, 'Authorization: Basic ' . $authCredentials . "\r\n");
  fwrite($this->conn, 'User-Agent: ' . self::USER_AGENT . "\r\n");

  list($httpVer, $httpCode, $httpMessage) = preg_split('/\s+/', trim(fgets($this->conn, 1024)), 3);

  //code never gets here!!!

有什么想法吗?

我通过添加标题“连接:关闭\r\n\r\n”解决了这个问题

对cookie的初始请求返回302重定向代码,除非您传递该头,否则将位于打开的连接上


不幸的是,这一小行让我困惑了一段时间。

我通过添加标题“Connection:Close\r\n\r\n”解决了这个问题

对cookie的初始请求返回302重定向代码,除非您传递该头,否则将位于打开的连接上


不幸的是,这条小线让我困惑了一段时间。

很高兴你解决了它。感谢您回来分享您的解决方案。很高兴您解决了它。感谢您回来分享您的解决方案。