示例#1
0
 /**
  * Reads a part of response body encoded with chunked Transfer-Encoding
  *
  * @param int $bufferSize buffer size to use for reading
  *
  * @return   string
  * @throws   HTTP_Request2_MessageException
  */
 protected function readChunked($bufferSize)
 {
     // at start of the next chunk?
     if (0 == $this->chunkLength) {
         $line = $this->socket->readLine($bufferSize);
         if ('' === $line && $this->socket->eof()) {
             $this->chunkLength = -1;
             // indicate missing chunk
             return '';
         } elseif (!preg_match('/^([0-9a-f]+)/i', $line, $matches)) {
             throw new HTTP_Request2_MessageException("Cannot decode chunked response, invalid chunk length '{$line}'", HTTP_Request2_Exception::DECODE_ERROR);
         } else {
             $this->chunkLength = hexdec($matches[1]);
             // Chunk with zero length indicates the end
             if (0 == $this->chunkLength) {
                 $this->socket->readLine($bufferSize);
                 return '';
             }
         }
     }
     $data = $this->socket->read(min($this->chunkLength, $bufferSize));
     $this->chunkLength -= strlen($data);
     if (0 == $this->chunkLength) {
         $this->socket->readLine($bufferSize);
         // Trailing CRLF
     }
     return $data;
 }