fsockopen https замораживание на fgets - PullRequest
1 голос
/ 23 апреля 2011

Я пытался подключиться к серверу через PHP fsockopen, чтобы сначала получить cookie для базовой аутентификации, а затем постоянно подключаться к потоковому серверу, определенному в заголовке Location в ответе.

Проблема в том, что мой код зависает на fgets и никогда не получает данные ответа от конечного сервера. Я подключаюсь через https через порт 443 на экземпляре Amazon ec2. Сервер прекрасно подключается через 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!!!

Есть мысли?

1 Ответ

1 голос
/ 23 апреля 2011

Я решил эту проблему, добавив заголовок: «Соединение: Закрыть \ r \ n \ r \ n».

Первоначальный запрос файла cookie возвращает код перенаправления 302. Он будет находиться в открытом соединении, если вы не передадите этот заголовок.

К сожалению, эта маленькая строчка на некоторое время поставила меня в тупик.

...