/** * {@inheritdoc} */ protected function sendInternalRequest(InternalRequestInterface $internalRequest) { $request = new Request(); foreach ($this->prepareHeaders($internalRequest) as $name => $value) { $request->header($name, $value); } $request->method($internalRequest->getMethod()); $request->body($this->prepareBody($internalRequest)); $request->url($uri = (string) $internalRequest->getUri()); $request->version($this->getConfiguration()->getProtocolVersion()); try { $response = $this->client->send($request, array('timeout' => $this->getConfiguration()->getTimeout(), 'redirect' => false)); } catch (\Exception $e) { throw HttpAdapterException::cannotFetchUri($uri, $this->getName(), $e->getMessage()); } return $this->getConfiguration()->getMessageFactory()->createResponse((int) $response->statusCode(), $response->version(), $response->headers(), $response->body()); }
/** * {@inheritdoc} */ public function sendRequest(RequestInterface $request) { $cakeRequest = new Request(); $cakeRequest->method($request->getMethod()); $cakeRequest->url((string) $request->getUri()); $cakeRequest->version($request->getProtocolVersion()); $cakeRequest->body($request->getBody()->getContents()); foreach ($request->getHeaders() as $header => $values) { $cakeRequest->header($header, $request->getHeaderLine($header)); } if (null === $cakeRequest->header('Content-Type')) { $cakeRequest->header('Content-Type', 'application/x-www-form-urlencoded'); } try { $cakeResponse = $this->client->send($cakeRequest, $this->client->config()); } catch (Exception $exception) { throw new NetworkException('Failed to send request', $request, $exception); } return $this->responseFactory->createResponse($cakeResponse->statusCode(), null, $cakeResponse->headers(), $cakeResponse->body(), $cakeResponse->version()); }
/** * Generate the header Authorization * * @param \Cake\Network\Http\Request $request The request object. * @param array $credentials Authentication credentials. * @return string */ protected function _generateHeader(Request $request, $credentials) { $path = parse_url($request->url(), PHP_URL_PATH); $a1 = md5($credentials['username'] . ':' . $credentials['realm'] . ':' . $credentials['password']); $a2 = md5($request->method() . ':' . $path); if (empty($credentials['qop'])) { $response = md5($a1 . ':' . $credentials['nonce'] . ':' . $a2); } else { $credentials['cnonce'] = uniqid(); $nc = sprintf('%08x', $credentials['nc']++); $response = md5($a1 . ':' . $credentials['nonce'] . ':' . $nc . ':' . $credentials['cnonce'] . ':auth:' . $a2); } $authHeader = 'Digest '; $authHeader .= 'username="******"'], ['\\\\', '\\"'], $credentials['username']) . '", '; $authHeader .= 'realm="' . $credentials['realm'] . '", '; $authHeader .= 'nonce="' . $credentials['nonce'] . '", '; $authHeader .= 'uri="' . $path . '", '; $authHeader .= 'response="' . $response . '"'; if (!empty($credentials['opaque'])) { $authHeader .= ', opaque="' . $credentials['opaque'] . '"'; } if (!empty($credentials['qop'])) { $authHeader .= ', qop="auth", nc=' . $nc . ', cnonce="' . $credentials['cnonce'] . '"'; } return $authHeader; }
/** * Build miscellaneous options for the request. * * @param \Cake\Network\Http\Request $request The request being sent. * @param array $options Array of options to use. * @return void */ protected function _buildOptions(Request $request, $options) { $this->_contextOptions['method'] = $request->method(); $this->_contextOptions['protocol_version'] = $request->version(); $this->_contextOptions['ignore_errors'] = true; if (isset($options['timeout'])) { $this->_contextOptions['timeout'] = $options['timeout']; } if (isset($options['redirect'])) { $this->_contextOptions['max_redirects'] = (int) $options['redirect']; } }
/** * Creates a new request object based on the parameters. * * @param string $method HTTP method name. * @param string $url The url including query string. * @param mixed $data The request body. * @param array $options The options to use. Contains auth, proxy etc. * @return \Cake\Network\Http\Request */ protected function _createRequest($method, $url, $data, $options) { $request = new Request(); $request->method($method)->url($url)->body($data); if (isset($options['type'])) { $request->header($this->_typeHeaders($options['type'])); } if (isset($options['headers'])) { $request->header($options['headers']); } $request->cookie($this->_cookies->get($url)); if (isset($options['cookies'])) { $request->cookie($options['cookies']); } if (isset($options['auth'])) { $this->_addAuthentication($request, $options); } if (isset($options['proxy'])) { $this->_addProxy($request, $options); } return $request; }
/** * Generate the Oauth basestring * * - Querystring, request data and oauth_* parameters are combined. * - Values are sorted by name and then value. * - Request values are concatenated and urlencoded. * - The request URL (without querystring) is normalized. * - The HTTP method, URL and request parameters are concatenated and returned. * * @param \Cake\Network\Http\Request $request The request object. * @param array $oauthValues Oauth values. * @return string */ public function baseString($request, $oauthValues) { $parts = [ $request->method(), $this->_normalizedUrl($request->url()), $this->_normalizedParams($request, $oauthValues), ]; $parts = array_map([$this, '_encode'], $parts); return implode('&', $parts); }
/** * Creates a new request object based on the parameters. * * @param string $method HTTP method name. * @param string $url The url including query string. * @param mixed $data The request body. * @param array $options The options to use. Contains auth, proxy etc. * @return \Cake\Network\Http\Request */ protected function _createRequest($method, $url, $data, $options) { $request = new Request(); $request->method($method)->url($url)->body($data); if (isset($options['type'])) { $request->header($this->_typeHeaders($options['type'])); } if (isset($options['headers'])) { $request->header($options['headers']); } if (is_string($data) && !$request->header('content-type')) { $request->header('Content-Type', 'application/x-www-form-urlencoded'); } $request->cookie($this->_cookies->get($url)); if (isset($options['cookies'])) { $request->cookie($options['cookies']); } if (isset($options['auth'])) { $this->_addAuthentication($request, $options); } if (isset($options['proxy'])) { $this->_addProxy($request, $options); } return $request; }
/** * test invalid method. * * @expectedException \Cake\Core\Exception\Exception * @return void */ public function testMethodInvalid() { $request = new Request(); $request->method('set on fire'); }