From 890deda2b2187b563b28d31a30516a6273bdcf2e Mon Sep 17 00:00:00 2001 From: Alexey Shockov Date: Fri, 15 Sep 2017 15:32:00 +0200 Subject: [PATCH] Proper service headers modification (#1913) --- src/Client.php | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/src/Client.php b/src/Client.php index de4df8a5c..6b35d892b 100644 --- a/src/Client.php +++ b/src/Client.php @@ -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'])) { @@ -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'; } @@ -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(); @@ -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; @@ -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(); }