Browse Source

Update Client and Stream to use new cookie collection.

Simplify how cookies are set into requests. Instead of multiple layers
munging cookies, it is all located in CookieCollection now.
Mark Story 9 years ago
parent
commit
b03ddd23e1

+ 4 - 7
src/Http/Client.php

@@ -45,8 +45,8 @@ use Cake\Utility\Hash;
  * Client will maintain cookies from the responses done with
  * a client instance. These cookies will be automatically added
  * to future requests to matching hosts. Cookies will respect the
- * `Expires`, `Path` and `Domain` attributes. You can get the list of
- * currently stored cookies using the cookies() method.
+ * `Expires`, `Path` and `Domain` attributes. You can get the client's
+ * CookieCollection using cookies()
  *
  * You can use the 'cookieJar' constructor option to provide a custom
  * cookie jar instance you've restored from cache/disk. By default
@@ -440,11 +440,8 @@ 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']);
-        }
+        $cookies = isset($options['cookies']) ? $option['cookies'] : [];
+        $request = $this->_cookies->addToRequest($request, $cookies);
         if (isset($options['auth'])) {
             $request = $this->_addAuthentication($request, $options);
         }

+ 1 - 13
src/Http/Client/Adapter/Stream.php

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

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

@@ -164,11 +164,7 @@ class StreamTest extends TestCase
             ->header([
                 'User-Agent' => 'CakePHP TestSuite',
                 'Content-Type' => 'application/json',
-                'Cookie' => 'a=b; c=d',
-            ])
-            ->cookie([
-                'testing' => 'value',
-                'utm_src' => 'awesome',
+                'Cookie' => 'a=b; c=do%20it'
             ]);
 
         $options = [
@@ -180,7 +176,7 @@ class StreamTest extends TestCase
             'Connection: close',
             'User-Agent: CakePHP TestSuite',
             'Content-Type: application/json',
-            'Cookie: a=b; c=d; testing=value; utm_src=awesome',
+            'Cookie: a=b; c=do%20it',
         ];
         $this->assertEquals(implode("\r\n", $expected), $result['header']);
         $this->assertEquals($options['redirect'], $result['max_redirects']);