/** * @param $request * @return array */ public function getCachingHeaders(Request $request) { if (strcasecmp($request->getMethod(), 'GET') !== 0) { //We only cache GET requests. return []; } $headers = []; $cacheFilename = $this->calculateRequestFilename($request); $cachedResponse = $this->getCachedResponse($cacheFilename); if ($cachedResponse != null) { /** @var $cachedResponse \Amp\Artax\Response */ if ($cachedResponse->hasHeader('ETag')) { $etagValues = $cachedResponse->getHeader('ETag'); foreach ($etagValues as $value) { $headers['If-None-Match'] = $value; //@TODO - are multiple 'if-none-match headers allowed? } } if ($cachedResponse->hasHeader('Last-Modified')) { $ifModifiedValues = $cachedResponse->getHeader('Last-Modified'); foreach ($ifModifiedValues as $value) { $headers['If-Modified-Since'] = $value; } } } return $headers; }
public static function fromRequest(Request $request) { $commandLines = []; $commandLines[] = "curl -i"; $commandLines[] = "-X " . $request->getMethod() . ""; //curl -i -H "Accept: application/json" -H "Content-Type: application/json" http://hostname/resource $headers = $request->getAllHeaders(); foreach ($headers as $name => $values) { foreach ($values as $value) { $commandLines[] = sprintf('-H "%s: %s"', $name, $value); } } $body = $request->getBody(); if ($body !== null) { $commandLines[] = '-d "' . addslashes($body) . '"'; } $commandLines[] = $request->getUri(); return implode(" \\\n", $commandLines); }
/** * @TODO Send absolute URIs in the request line when using a proxy server * Right now this doesn't matter because all proxy requests use a CONNECT * tunnel but this likely will not always be the case. */ private function generateRawRequestHeaders(Request $request) { $uri = $request->getUri(); $uri = new Uri($uri); $requestUri = $uri->getPath() ?: '/'; if ($query = $uri->getQuery()) { $requestUri .= '?' . $query; } $str = $request->getMethod() . ' ' . $requestUri . ' HTTP/' . $request->getProtocol() . "\r\n"; foreach ($request->getAllHeaders() as $field => $valueArr) { foreach ($valueArr as $value) { $str .= "{$field}: {$value}\r\n"; } } $str .= "\r\n"; return $str; }
public function testGetAndSetMethod() { $request = new Request(); $request->setMethod('GET'); $this->assertEquals('GET', $request->getMethod()); }