Browse Source

Use undeprecated methods for adding cookies.

Also fix issue where a request with cookie headers would have the header
value dropped when the request was sent.
Mark Story 9 years ago
parent
commit
5034140325

+ 1 - 0
src/Http/Client.php

@@ -440,6 +440,7 @@ class Client
         }
 
         $request = new Request($url, $method, $headers, $data);
+        $request = $this->_cookies->addToRequest($request);
         $request->cookie($this->_cookies->get($url));
         if (isset($options['cookies'])) {
             $request->cookie($options['cookies']);

+ 7 - 3
src/Http/Client/Adapter/Stream.php

@@ -147,15 +147,19 @@ class Stream
     {
         $headers = [];
         foreach ($request->getHeaders() as $name => $values) {
-            $headers[] = sprintf('%s: %s', $name, implode(", ", $values));
+            if ($name !== 'Cookie') {
+                $headers[] = sprintf('%s: %s', $name, implode(", ", $values));
+            }
         }
 
+        $cookieHeader = $request->getHeaderLine('Cookie');
         $cookies = [];
         foreach ($request->cookies() as $name => $value) {
             $cookies[] = "$name=$value";
         }
-        if ($cookies) {
-            $headers[] = 'Cookie: ' . implode('; ', $cookies);
+        $cookieData = implode('; ', $cookies);
+        if ($cookieData || $cookieHeader) {
+            $headers[] = 'Cookie: ' . implode('; ', [$cookieHeader, $cookieData]);
         }
         $this->_contextOptions['header'] = implode("\r\n", $headers);
     }

+ 3 - 2
tests/TestCase/Http/Client/Adapter/StreamTest.php

@@ -163,7 +163,8 @@ class StreamTest extends TestCase
         $request->url('http://localhost')
             ->header([
                 'User-Agent' => 'CakePHP TestSuite',
-                'Content-Type' => 'application/json'
+                'Content-Type' => 'application/json',
+                'Cookie' => 'a=b; c=d',
             ])
             ->cookie([
                 'testing' => 'value',
@@ -179,7 +180,7 @@ class StreamTest extends TestCase
             'Connection: close',
             'User-Agent: CakePHP TestSuite',
             'Content-Type: application/json',
-            'Cookie: testing=value; utm_src=awesome',
+            'Cookie: a=b; c=d; testing=value; utm_src=awesome',
         ];
         $this->assertEquals(implode("\r\n", $expected), $result['header']);
         $this->assertEquals($options['redirect'], $result['max_redirects']);

+ 0 - 1
tests/TestCase/Http/ClientTest.php

@@ -611,7 +611,6 @@ class ClientTest extends TestCase
         $http = new Client([
             'host' => 'cakephp.org',
             'adapter' => $adapter,
-            'cookieJar' => $cookieJar
         ]);
 
         $http->get('/projects');