模拟登陆常用的是使用 Curl,然而登陆不可少的是对 cookie 的处理。
方式一
PHP中 Curl 对 cookie 处理成对出现的是 CURLOPT_COOKIEJAR(用于保存cookie)、CURLOPT_COOKIEFILE(用于读取cookie),一般如下设置:
$cookie_file = 'your-file.dat';
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
方式二
但是 PHP curl 中还有一种发送 cookie 的方式是字符串方式:
curl_setopt($ch, CURLOPT_COOKIE, $cookie_string);
这种字符串方式可以用于服务器间转发 cookie ,比如用户A登陆到服务器B,服务器B向服务器C转发用户A的 cookie ,用于某些业务判断(一般服务器B与C同属一个主域名)。
<?php
$cookie_string = '';
foreach ($_COOKIE as $k => $v) {
$cookie_string .= $k . '=' . urlencode($v) . '; ';
}
//...初始化CURL
curl_setopt($ch, CURLOPT_COOKIE, $cookie_string);
注意:
- PHP 会自动对 cookie 的读取写入进行 urlencode 和 urldecode
- cookie 字符串的格式,这里 key=value ,一定要对 value 进行URL编码(可能某些是中文)防止踩坑
- 设定 HTTP 请求中“Cookie: “部分的内容。多个 cookie 用分号分隔,分号后带一个空格(例如, “key=value; fruit=apple; colour=red“)
参考文章:
https://blog.csdn.net/slyjit/article/details/81812172
https://www.php.net/manual/zh/function.curl-setopt.php