/** * Read data from the request body and send it to curl * * @param resource $ch Curl handle * @param resource $fd File descriptor * @param int $length Amount of data to read * * @return string */ public function readRequestBody($ch, $fd, $length) { $read = ''; if ($this->request->getBody()) { $read = $this->request->getBody()->read($length); if ($this->emitIo) { $this->request->dispatch('curl.callback.read', array('request' => $this->request, 'read' => $read)); } } return !$read ? '' : $read; }
/** * Read data from the request body and send it to curl * * @param resource $ch Curl handle * @param resource $fd File descriptor * @param int $length Amount of data to read * * @return string */ public function readRequestBody($ch, $fd, $length) { if (!($body = $this->request->getBody())) { return ''; } $read = (string) $body->read($length); if ($this->emitIo) { $this->request->dispatch('curl.callback.read', array('request' => $this->request, 'read' => $read)); } return $read; }
public function fromRequest(RequestInterface $request, $context = array(), array $params = array()) { if (is_resource($context)) { $this->contextOptions = stream_context_get_options($context); $this->context = $context; } elseif (is_array($context) || !$context) { $this->contextOptions = $context; $this->createContext($params); } elseif ($context) { throw new InvalidArgumentException('$context must be an array or resource'); } $request->dispatch('request.before_send', array('request' => $request, 'context' => $this->context, 'context_options' => $this->contextOptions)); $this->setUrl($request); $this->addDefaultContextOptions($request); $this->addSslOptions($request); $this->addBodyOptions($request); $this->addProxyOptions($request); return $this->createStream($params)->setCustomData('request', $request)->setCustomData('response_headers', $this->getLastResponseHeaders()); }
/** * Prepare for sending * * @param RequestInterface $request Request to prepare * @throws \Exception on error preparing the request */ protected function beforeSend(RequestInterface $request) { try { // Fix Content-Length and Transfer-Encoding collisions if ($request->hasHeader('Transfer-Encoding') && $request->hasHeader('Content-Length')) { $request->removeHeader('Transfer-Encoding'); } $request->setState(RequestInterface::STATE_TRANSFER); $request->dispatch('request.before_send', array('request' => $request)); if ($request->getState() != RequestInterface::STATE_TRANSFER) { // Requests might decide they don't need to be sent just before transfer (e.g. CachePlugin) $this->remove($request); if ($request->getState() == RequestInterface::STATE_COMPLETE) { $this->successful[] = $request; } } else { // Add the request curl handle to the multi handle $this->checkCurlResult(curl_multi_add_handle($this->multiHandle, $this->createCurlHandle($request)->getHandle())); } } catch (\Exception $e) { // Queue the exception to be thrown when sent $this->removeErroredRequest($request, $e); } }
/** * Prepare for sending * * @param RequestInterface $request Request to prepare */ protected function beforeSend(RequestInterface $request) { try { $request->setState(RequestInterface::STATE_TRANSFER); $request->dispatch('request.before_send', array('request' => $request)); if ($request->getState() != RequestInterface::STATE_TRANSFER) { // Requests might decide they don't need to be sent just before // transfer (e.g. CachePlugin) $this->remove($request); } else { if ($request->getParams()->get('queued_response')) { // Queued responses do not need to be sent using curl $this->remove($request); $request->setState(RequestInterface::STATE_COMPLETE); } else { // Add the request's curl handle to the multi handle $this->checkCurlResult(curl_multi_add_handle($this->multiHandle, $this->createCurlHandle($request)->getHandle())); } } } catch (\Exception $e) { $this->removeErroredRequest($request, $e); } }