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); }
/** * Calculate the filename that the request should be cached as */ public function calculateRequestFilename(Request $request) { $string = $request->getUri(); $filename = parse_url($string, PHP_URL_HOST); $filename .= '_' . parse_url($string, PHP_URL_PATH); $headers = $request->getAllHeaders(); ksort($headers); foreach ($headers as $header => $values) { $string .= $header; foreach ($values as $value) { $string .= $value; } } $filename .= '_' . sha1($string); if (strpos($filename, '_') === 0) { //Makes sorting not be crap $filename = substr($filename, 1); } return $this->cacheDirectory . '/' . $filename . '.cache'; }
/** * @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; }