/** * 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); } }
/** * 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); } }
/** * 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; }