使用PHP curl发送cookie字符串

模拟登陆常用的是使用 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

Author: thinkwei

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注