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;