Example #1
0
 /**
  * Fulfill promise.
  *
  * @throws \Exception from on fulfill handler.
  */
 public function fulfill()
 {
     $this->state = Promise::FULFILLED;
     $response = $this->responseBuilder->getResponse();
     $response->getBody()->seek(0);
     while (count($this->onFulfilled) > 0) {
         $callback = array_shift($this->onFulfilled);
         $response = call_user_func($callback, $response);
     }
     if ($response instanceof ResponseInterface) {
         $this->responseBuilder->setResponse($response);
     }
 }
Example #2
0
 /**
  * Fulfill promise.
  */
 public function fulfill()
 {
     $this->state = Promise::FULFILLED;
     $response = $this->responseBuilder->getResponse();
     try {
         $response->getBody()->seek(0);
     } catch (\RuntimeException $e) {
         $exception = new Exception\TransferException($e->getMessage(), $e->getCode(), $e);
         $this->reject($exception);
         return;
     }
     while (count($this->onFulfilled) > 0) {
         $callback = array_shift($this->onFulfilled);
         $response = call_user_func($callback, $response);
     }
     if ($response instanceof ResponseInterface) {
         $this->responseBuilder->setResponse($response);
     }
 }
Example #3
0
 /**
  * Generates cURL options
  *
  * @param RequestInterface $request
  * @param ResponseBuilder  $responseBuilder
  *
  * @throws \Http\Client\Exception\RequestException On invalid request.
  * @throws \InvalidArgumentException For invalid header names or values.
  * @throws \RuntimeException if can not read body
  *
  * @return array
  */
 private function createCurlOptions(RequestInterface $request, ResponseBuilder $responseBuilder)
 {
     $options = $this->options;
     $options[CURLOPT_HEADER] = false;
     $options[CURLOPT_RETURNTRANSFER] = false;
     $options[CURLOPT_FOLLOWLOCATION] = false;
     try {
         $options[CURLOPT_HTTP_VERSION] = $this->getProtocolVersion($request->getProtocolVersion());
     } catch (\UnexpectedValueException $e) {
         throw new Exception\RequestException($e->getMessage(), $request);
     }
     $options[CURLOPT_URL] = (string) $request->getUri();
     $options = $this->addRequestBodyOptions($request, $options);
     $options[CURLOPT_HTTPHEADER] = $this->createHeaders($request, $options);
     if ($request->getUri()->getUserInfo()) {
         $options[CURLOPT_USERPWD] = $request->getUri()->getUserInfo();
     }
     $options[CURLOPT_HEADERFUNCTION] = function ($ch, $data) use($responseBuilder) {
         $str = trim($data);
         if ('' !== $str) {
             if (strpos(strtolower($str), 'http/') === 0) {
                 $responseBuilder->setStatus($str)->getResponse();
             } else {
                 $responseBuilder->addHeader($str);
             }
         }
         return strlen($data);
     };
     $options[CURLOPT_WRITEFUNCTION] = function ($ch, $data) use($responseBuilder) {
         return $responseBuilder->getResponse()->getBody()->write($data);
     };
     return $options;
 }