private function addContentLength(RequestInterface $request, StreamInterface $body) { // Set the Content-Length header if it can be determined, and never // send a Transfer-Encoding: chunked and Content-Length header in // the same request. if ($request->hasHeader('Content-Length')) { // Remove transfer-encoding if content-length is set. $request->removeHeader('Transfer-Encoding'); return; } if ($request->hasHeader('Transfer-Encoding')) { return; } if (null !== ($size = $body->getSize())) { $request->setHeader('Content-Length', $size); $request->removeHeader('Transfer-Encoding'); } elseif ('1.1' == $request->getProtocolVersion()) { // Use chunked Transfer-Encoding if there is no determinable // content-length header and we're using HTTP/1.1. $request->setHeader('Transfer-Encoding', 'chunked'); $request->removeHeader('Content-Length'); } }
public function signRequest(RequestInterface $request, CredentialsInterface $credentials) { // Ensure that the signable query string parameters are sorted sort($this->signableQueryString); // Add the security token header if one is being used by the credentials if ($token = $credentials->getSecurityToken()) { $request->setHeader('X-Amz-Security-Token', $token); } // Add a date header if one is not set $request->removeHeader('X-Amz-Date'); $request->setHeader('Date', gmdate(\DateTime::RFC2822)); $stringToSign = $this->createCanonicalizedString($request); $request->getConfig()['aws.signature'] = $stringToSign; $request->setHeader('Authorization', 'AWS ' . $credentials->getAccessKeyId() . ':' . $this->signString($stringToSign, $credentials)); }
private function moveHeadersToQuery(RequestInterface $request) { $query = $request->getQuery(); foreach ($request->getHeaders() as $name => $header) { $name = strtolower($name); if (substr($name, 0, 5) == 'x-amz') { $query[$name] = $header; } if ($name !== 'host') { $request->removeHeader($name); } } }