Skip to content

Commit

Permalink
Merge pull request #1916 from alexeyshockov/service-headers-fix
Browse files Browse the repository at this point in the history
Proper service headers modification
  • Loading branch information
sagikazarmark committed Mar 26, 2018
2 parents 5d340a9 + 890deda commit 188a942
Showing 1 changed file with 18 additions and 10 deletions.
28 changes: 18 additions & 10 deletions src/Client.php
Expand Up @@ -290,7 +290,14 @@ private function transfer(RequestInterface $request, array $options)
*/
private function applyOptions(RequestInterface $request, array &$options)
{
$modify = [];
$modify = [
'set_headers' => [],
];

if (isset($options['headers'])) {
$modify['set_headers'] = $options['headers'];
unset($options['headers']);
}

if (isset($options['form_params'])) {
if (isset($options['multipart'])) {
Expand All @@ -302,6 +309,8 @@ private function applyOptions(RequestInterface $request, array &$options)
}
$options['body'] = http_build_query($options['form_params'], '', '&');
unset($options['form_params']);
// Ensure that we don't have the header in different case and set the new value.
$options['_conditional'] = Psr7\_caseless_remove(['Content-Type'], $options['_conditional']);
$options['_conditional']['Content-Type'] = 'application/x-www-form-urlencoded';
}

Expand All @@ -313,24 +322,19 @@ private function applyOptions(RequestInterface $request, array &$options)
if (isset($options['json'])) {
$options['body'] = \GuzzleHttp\json_encode($options['json']);
unset($options['json']);
// Ensure that we don't have the header in different case and set the new value.
$options['_conditional'] = Psr7\_caseless_remove(['Content-Type'], $options['_conditional']);
$options['_conditional']['Content-Type'] = 'application/json';
}

if (!empty($options['decode_content'])
&& $options['decode_content'] !== true
) {
// Ensure that we don't have the header in different case and set the new value.
$options['_conditional'] = Psr7\_caseless_remove(['Accept-Encoding'], $modify['set_headers']);
$modify['set_headers']['Accept-Encoding'] = $options['decode_content'];
}

if (isset($options['headers'])) {
if (isset($modify['set_headers'])) {
$modify['set_headers'] = $options['headers'] + $modify['set_headers'];
} else {
$modify['set_headers'] = $options['headers'];
}
unset($options['headers']);
}

if (isset($options['body'])) {
if (is_array($options['body'])) {
$this->invalidBody();
Expand All @@ -344,6 +348,8 @@ private function applyOptions(RequestInterface $request, array &$options)
$type = isset($value[2]) ? strtolower($value[2]) : 'basic';
switch ($type) {
case 'basic':
// Ensure that we don't have the header in different case and set the new value.
$modify['set_headers'] = Psr7\_caseless_remove(['Authorization'], $modify['set_headers']);
$modify['set_headers']['Authorization'] = 'Basic '
. base64_encode("$value[0]:$value[1]");
break;
Expand Down Expand Up @@ -382,6 +388,8 @@ private function applyOptions(RequestInterface $request, array &$options)
$request = Psr7\modify_request($request, $modify);
if ($request->getBody() instanceof Psr7\MultipartStream) {
// Use a multipart/form-data POST if a Content-Type is not set.
// Ensure that we don't have the header in different case and set the new value.
$options['_conditional'] = Psr7\_caseless_remove(['Content-Type'], $options['_conditional']);
$options['_conditional']['Content-Type'] = 'multipart/form-data; boundary='
. $request->getBody()->getBoundary();
}
Expand Down

0 comments on commit 188a942

Please sign in to comment.