public function parseResponse(Yoast_Google_HttpRequest $response)
 {
     $contentType = $response->getResponseHeader('content-type');
     $contentType = explode(';', $contentType);
     $boundary = false;
     foreach ($contentType as $part) {
         $part = explode('=', $part, 2);
         if (isset($part[0]) && 'boundary' == trim($part[0])) {
             $boundary = $part[1];
         }
     }
     $body = $response->getResponseBody();
     if ($body) {
         $body = str_replace("--{$boundary}--", "--{$boundary}", $body);
         $parts = explode("--{$boundary}", $body);
         $responses = array();
         foreach ($parts as $part) {
             $part = trim($part);
             if (!empty($part)) {
                 list($metaHeaders, $part) = explode("\r\n\r\n", $part, 2);
                 $metaHeaders = Yoast_Google_CurlIO::parseResponseHeaders($metaHeaders);
                 $status = substr($part, 0, strpos($part, "\n"));
                 $status = explode(" ", $status);
                 $status = $status[1];
                 list($partHeaders, $partBody) = Yoast_Google_CurlIO::parseHttpResponse($part, false);
                 $response = new Yoast_Google_HttpRequest("");
                 $response->setResponseHttpCode($status);
                 $response->setResponseHeaders($partHeaders);
                 $response->setResponseBody($partBody);
                 $response = Yoast_Google_REST::decodeHttpResponse($response);
                 // Need content id.
                 $responses[$metaHeaders['content-id']] = $response;
             }
         }
         return $responses;
     }
     return null;
 }
Beispiel #2
0
 /**
  * Update a cached request, using the headers from the last response.
  * @param Yoast_Google_HttpRequest $cached A previously cached response.
  * @param mixed Associative array of response headers from the last request.
  */
 protected function updateCachedRequest($cached, $responseHeaders)
 {
     if (isset($responseHeaders['connection'])) {
         $hopByHop = array_merge(self::$HOP_BY_HOP, explode(',', $responseHeaders['connection']));
         $endToEnd = array();
         foreach ($hopByHop as $key) {
             if (isset($responseHeaders[$key])) {
                 $endToEnd[$key] = $responseHeaders[$key];
             }
         }
         $cached->setResponseHeaders($endToEnd);
     }
 }