@@ -61,21 +61,29 @@ public function call(string $method, string $path = '', array $headers = [], arr
6161 $ responseType = '' ;
6262 $ responseBody = '' ;
6363
64+ $ cookies = [];
65+
6466 curl_setopt ($ ch , CURLOPT_CUSTOMREQUEST , $ method );
6567 curl_setopt ($ ch , CURLOPT_RETURNTRANSFER , 1 );
6668 curl_setopt ($ ch , CURLOPT_FOLLOWLOCATION , true );
6769 curl_setopt ($ ch , CURLOPT_USERAGENT , 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36 ' );
6870 curl_setopt ($ ch , CURLOPT_HTTPHEADER , $ headers );
6971 curl_setopt ($ ch , CURLOPT_CONNECTTIMEOUT , 0 );
7072 curl_setopt ($ ch , CURLOPT_TIMEOUT , 15 );
71- curl_setopt ($ ch , CURLOPT_HEADERFUNCTION , function ($ curl , $ header ) use (&$ responseHeaders ) {
73+ curl_setopt ($ ch , CURLOPT_HEADERFUNCTION , function ($ curl , $ header ) use (&$ responseHeaders, & $ cookies ) {
7274 $ len = strlen ($ header );
7375 $ header = explode (': ' , $ header , 2 );
7476
7577 if (count ($ header ) < 2 ) { // ignore invalid headers
7678 return $ len ;
7779 }
7880
81+ if (strtolower (trim ($ header [0 ])) == 'set-cookie ' ) {
82+ $ parsed = $ this ->parseCookie ((string )trim ($ header [1 ]));
83+ $ name = array_key_first ($ parsed );
84+ $ cookies [$ name ] = $ parsed [$ name ];
85+ }
86+
7987 $ responseHeaders [strtolower (trim ($ header [0 ]))] = trim ($ header [1 ]);
8088
8189 return $ len ;
@@ -99,6 +107,23 @@ public function call(string $method, string $path = '', array $headers = [], arr
99107 return [
100108 'headers ' => $ responseHeaders ,
101109 'body ' => $ responseBody ,
110+ 'cookies ' => $ cookies ,
102111 ];
103112 }
113+
114+ /**
115+ * Parse Cookie String
116+ *
117+ * @param string $cookie
118+ * @return array
119+ */
120+ public function parseCookie (string $ cookie ): array
121+ {
122+ $ cookies = [];
123+
124+ parse_str (strtr ($ cookie , ['& ' => '%26 ' , '+ ' => '%2B ' , '; ' => '& ' ]), $ cookies );
125+
126+ return $ cookies ;
127+ }
128+
104129}
0 commit comments