curl - Cookie

  • 作者:KK

  • 发表日期:2017.4.9


发送Cookie

发送端要设置CURLOPT_COOKIE

$curlHandler = curl_init();
curl_setopt($curlHandler, CURLOPT_URL, 'http://test/b.php');
curl_setopt($curlHandler, CURLOPT_RETURNTRANSFER, 1);

//重点
curl_setopt($curlHandler, CURLOPT_COOKIE, 'token=1111;PHPSESSIONID=2222');

$result = curl_exec($curlHandler);
curl_close($curlHandler);

header('Content-type:text/html;charset=utf8');
echo $result;

被请求的b.php测试代码:

echo '收到的cookie是' . json_encode($_COOKIE);

运行后应该会输出“收到的cookie是{"token":"1111","PHPSESSIONID":"2222"}


接收Cookie

如果要把服务端要响应Cookie存下来就要设置CURLOPT_COOKIEJAR

$curlHandler = curl_init();
curl_setopt($curlHandler, CURLOPT_URL, 'http://test/b.php');
curl_setopt($curlHandler, CURLOPT_RETURNTRANSFER, 1);

//重点
$cookieFile = __DIR__ . '/cookie.txt';
curl_setopt($curlHandler, CURLOPT_COOKIEJAR, $cookieFile); //接收时将服务端的cookie写入此文件

$result = curl_exec($curlHandler);
curl_close($curlHandler);

header('Content-type:text/html;charset=utf8');
echo $result;

然后在b.php里执行这样的代码:setcookie('key1', 'value1'); echo 'html...';

请求b.php后就会在当前目录下产生一个cookie.txt,打开后里面的内容就是接收到的cookie,内容格式如下:

# Netscape HTTP Cookie File
# https://curl.haxx.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.

test	FALSE	/	FALSE	0	key1	value1

你可以不用懂它的含义,反正Cookie就存下来了


把接收来的Cookie再发送出去

那么问题来了,如果你依然用上面的代码是不行的,注意CURLOPT_COOKIEJAR这个选项只是用于设置接收cookie的文件但不负责发送Cookie

我们得另外设置一个CURLOPT_COOKIEFILE才可以:

$curlHandler = curl_init();
curl_setopt($curlHandler, CURLOPT_URL, 'http://test/b.php');
curl_setopt($curlHandler, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curlHandler, CURLOPT_HEADER, 0);

$cookieFile = __DIR__ . '/cookie.txt';
curl_setopt($curlHandler, CURLOPT_COOKIEFILE, $cookieFile); //重点重点:发送请求时从该文件读取cookie发出去
curl_setopt($curlHandler, CURLOPT_COOKIEJAR, $cookieFile); //接收时将服务端的cookie写入此文件

$result = curl_exec($curlHandler);
curl_close($curlHandler);

header('Content-type:text/html;charset=utf8');
echo $result;