Esempio n. 1
0
 /**
  * Check if an HTTP request can be cached by a private local cache.
  *
  * @static
  * @param W3TCG_Google_Http_Request $resp
  * @return bool True if the request is cacheable.
  * False if the request is uncacheable.
  */
 public static function isRequestCacheable(W3TCG_Google_Http_Request $resp)
 {
     $method = $resp->getRequestMethod();
     if (!in_array($method, self::$CACHEABLE_HTTP_METHODS)) {
         return false;
     }
     // Don't cache authorized requests/responses.
     // [rfc2616-14.8] When a shared cache receives a request containing an
     // Authorization field, it MUST NOT return the corresponding response
     // as a reply to any other request...
     if ($resp->getRequestHeader("authorization")) {
         return false;
     }
     return true;
 }
Esempio n. 2
0
 /**
  * @param $meta
  * @param $params
  * @return array|bool
  * @visible for testing
  */
 private function process()
 {
     $postBody = false;
     $contentType = false;
     $meta = $this->request->getPostBody();
     $meta = is_string($meta) ? json_decode($meta, true) : $meta;
     $uploadType = $this->getUploadType($meta);
     $this->request->setQueryParam('uploadType', $uploadType);
     $this->transformToUploadUrl();
     $mimeType = $this->mimeType ? $this->mimeType : $this->request->getRequestHeader('content-type');
     if (self::UPLOAD_RESUMABLE_TYPE == $uploadType) {
         $contentType = $mimeType;
         $postBody = is_string($meta) ? $meta : json_encode($meta);
     } else {
         if (self::UPLOAD_MEDIA_TYPE == $uploadType) {
             $contentType = $mimeType;
             $postBody = $this->data;
         } else {
             if (self::UPLOAD_MULTIPART_TYPE == $uploadType) {
                 // This is a multipart/related upload.
                 $boundary = $this->boundary ? $this->boundary : mt_rand();
                 $boundary = str_replace('"', '', $boundary);
                 $contentType = 'multipart/related; boundary=' . $boundary;
                 $related = "--{$boundary}\r\n";
                 $related .= "Content-Type: application/json; charset=UTF-8\r\n";
                 $related .= "\r\n" . json_encode($meta) . "\r\n";
                 $related .= "--{$boundary}\r\n";
                 $related .= "Content-Type: {$mimeType}\r\n";
                 $related .= "Content-Transfer-Encoding: base64\r\n";
                 $related .= "\r\n" . base64_encode($this->data) . "\r\n";
                 $related .= "--{$boundary}--";
                 $postBody = $related;
             }
         }
     }
     $this->request->setPostBody($postBody);
     if (isset($contentType) && $contentType) {
         $contentTypeHeader['content-type'] = $contentType;
         $this->request->setRequestHeaders($contentTypeHeader);
     }
 }
Esempio n. 3
0
 /**
  * @visible for testing
  * Process an http request that contains an enclosed entity.
  * @param W3TCG_Google_Http_Request $request
  * @return W3TCG_Google_Http_Request Processed request with the enclosed entity.
  */
 public function processEntityRequest(W3TCG_Google_Http_Request $request)
 {
     $postBody = $request->getPostBody();
     $contentType = $request->getRequestHeader("content-type");
     // Set the default content-type as application/x-www-form-urlencoded.
     if (false == $contentType) {
         $contentType = self::FORM_URLENCODED;
         $request->setRequestHeaders(array('content-type' => $contentType));
     }
     // Force the payload to match the content-type asserted in the header.
     if ($contentType == self::FORM_URLENCODED && is_array($postBody)) {
         $postBody = http_build_query($postBody, '', '&');
         $request->setPostBody($postBody);
     }
     // Make sure the content-length header is set.
     if (!$postBody || is_string($postBody)) {
         $postsLength = strlen($postBody);
         $request->setRequestHeaders(array('content-length' => $postsLength));
     }
     return $request;
 }