예제 #1
0
 private function addExpectHeader(puzzle_message_RequestInterface $request, puzzle_stream_StreamInterface $body)
 {
     // Determine if the Expect header should be used
     if ($request->hasHeader('Expect')) {
         return;
     }
     $expect = $request->getConfig();
     $expect = $expect['expect'];
     // Return if disabled or if you're not using HTTP/1.1
     if ($expect === false || $request->getProtocolVersion() !== '1.1') {
         return;
     }
     // The expect header is unconditionally enabled
     if ($expect === true) {
         $request->setHeader('Expect', '100-Continue');
         return;
     }
     // By default, send the expect header when the payload is > 1mb
     if ($expect === null) {
         $expect = 1048576;
     }
     // Always add if the body cannot be rewound, the size cannot be
     // determined, or the size is greater than the cutoff threshold
     $size = $body->getSize();
     if ($size === null || $size >= (int) $expect || !$body->isSeekable()) {
         $request->setHeader('Expect', '100-Continue');
     }
 }
예제 #2
0
 /**
  * Applies request headers to a request based on the POST state
  *
  * @param puzzle_message_RequestInterface $request Request to update
  */
 public function applyRequestHeaders(puzzle_message_RequestInterface $request)
 {
     if ($this->files || $this->forceMultipart) {
         $request->setHeader('Content-Type', 'multipart/form-data; boundary=' . $this->getBody()->getBoundary());
     } elseif ($this->fields) {
         $request->setHeader('Content-Type', 'application/x-www-form-urlencoded');
     }
     if ($size = $this->getSize()) {
         $request->setHeader('Content-Length', $size);
     }
 }
예제 #3
0
 /**
  * Factory method to create a new exception with a normalized error message
  *
  * @param puzzle_message_RequestInterface  $request  Request
  * @param puzzle_message_ResponseInterface $response Response received
  * @param Exception        $previous Previous exception
  *
  * @return self
  */
 public static function create(puzzle_message_RequestInterface $request, puzzle_message_ResponseInterface $response = null, Exception $previous = null)
 {
     if (!$response) {
         return new self('Error completing request', $request, null, $previous);
     }
     $statusCode = $response->getStatusCode();
     $level = $statusCode[0];
     if ($level == '4') {
         $label = 'Client error response';
         $className = 'puzzle_exception_ClientException';
     } elseif ($level == '5') {
         $label = 'Server error response';
         $className = 'puzzle_exception_ServerException';
     } else {
         $label = 'Unsuccessful response';
         $className = __CLASS__;
     }
     $message = $label . ' [url] ' . $request->getUrl() . ' [status code] ' . $response->getStatusCode() . ' [reason phrase] ' . $response->getReasonPhrase();
     return new $className($message, $request, $response, $previous);
 }
예제 #4
0
 private function add_decode_content(puzzle_message_RequestInterface $request, $value)
 {
     if ($value === false) {
         return;
     }
     if ($value !== true) {
         $request->setHeader('Accept-Encoding', $value);
     }
     $config = $request->getConfig();
     $config['decode_content'] = true;
 }
예제 #5
0
 /**
  * Set the appropriate URL on the request based on the location header
  *
  * @param puzzle_message_RequestInterface  $redirectRequest
  * @param puzzle_message_ResponseInterface $response
  */
 private function setRedirectUrl(puzzle_message_RequestInterface $redirectRequest, puzzle_message_ResponseInterface $response)
 {
     $location = $response->getHeader('Location');
     $location = puzzle_Url::fromString($location);
     // Combine location with the original URL if it is not absolute.
     if (!$location->isAbsolute()) {
         $originalUrl = puzzle_Url::fromString($redirectRequest->getUrl());
         // Remove query string parameters and just take what is present on
         // the redirect Location header
         $originalUrl->getQuery()->clear();
         $location = $originalUrl->combine($location);
     }
     $redirectRequest->setUrl($location);
 }
예제 #6
0
 private function add_decode_content(puzzle_message_RequestInterface $request, puzzle_adapter_curl_RequestMediator $mediator, $value)
 {
     if (!$request->hasHeader('Accept-Encoding')) {
         $this->_closure_handleOptions[CURLOPT_ENCODING] = '';
         // Don't let curl send the header over the wire
         $this->_closure_handleOptions[CURLOPT_HTTPHEADER][] = 'Accept-Encoding:';
     } else {
         $this->_closure_handleOptions[CURLOPT_ENCODING] = $request->getHeader('Accept-Encoding');
     }
 }
예제 #7
0
 private function createStreamResource(puzzle_message_RequestInterface $request, array $options, $context, &$http_response_header)
 {
     $this->_closure_createStreamResource_url = $request->getUrl();
     $this->_closure_createStreamResource_context = $context;
     return $this->createResource(array($this, '__callback_createStreamResource'), $request, $options);
 }
예제 #8
0
 public function addCookieHeader(puzzle_message_RequestInterface $request)
 {
     $values = array();
     $scheme = $request->getScheme();
     $host = $request->getHost();
     $path = $request->getPath();
     foreach ($this->cookies as $cookie) {
         if ($cookie->matchesPath($path) && $cookie->matchesDomain($host) && !$cookie->isExpired() && (!$cookie->getSecure() || $scheme == 'https')) {
             $values[] = $cookie->getName() . '=' . self::getCookieValue($cookie->getValue());
         }
     }
     if ($values) {
         $request->setHeader('Cookie', implode(';', $values));
     }
 }
예제 #9
0
 /**
  * {@inheritdoc}
  */
 public function setMethod($method)
 {
     $this->_delegate->setMethod($method);
     return $this;
 }
예제 #10
0
 private function emit(puzzle_message_RequestInterface $request)
 {
     $event = new puzzle_event_BeforeEvent(new puzzle_adapter_Transaction(new puzzle_Client(), $request));
     $request->getEmitter()->emit('before', $event);
 }