/**
  * @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;
 }
Esempio n. 2
0
 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);
 }
Esempio n. 3
0
 /**
  * @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;
 }
Esempio n. 4
0
 public function testGetAndSetMethod()
 {
     $request = new Request();
     $request->setMethod('GET');
     $this->assertEquals('GET', $request->getMethod());
 }