【发布时间】:2015-12-23 14:12:29
【问题描述】:
我打开了 curl 会话,它设置了 cookie 文件,因此它会记住会话 ID(来自登录)。但是我现在如何修改这些 cookie?
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Cookie:blabla=bleble'));
似乎动作不正确,因为它添加了另一个 Cookie 标头,所以如果我在请求标头之间有:
...
Cookie:blabla=uhuhu;tralala=ahahaha
...
我运行这个:
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Cookie:blabla=bleble'));
它将简单地添加另一个具有相同变量但值不同的 Cookie 标头:
...
Cookie:blabla=uhuhu;tralala=ahahaha
...
Cookie:blabla=bleble
那么如何修改现有的 Cookie 而不是添加另一个 Cookie 标头?
例如,当我登录网站时,将会话 cookie 保存在文件中,并且在第二个请求中想要替换它时,我会得到这样的信息(正在发送):
替换为CURLOPT_HTTPHEADER
curl_setopt($curl, CURLOPT_HTTPHEADER, 'Cookie: 46db1eb1/sessid=blabla; 46db1eb1/zoom-accessibility=small');
POST /sysbus/NeMo/Intf/data:setFirstParameter HTTP/1.1
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1
Host: 192.168.1.1
Accept: */*
Cookie: 46db1eb1/sessid=YHGDba31faykfyTJraQMewP+
Content-Type:application/x-sah-ws-1-call+json; charset=UTF-8
X-Context:n1psjUEjqs5j7Bb5vvT0J3wXMunQ2e8c3ksb5Uikcdt9Ct1XOJUmAh8azkOqmMqe
X-Prototype-Version:1.7
X-Requested-With:XMLHttpRequest
Referer:http://192.168.1.1/advConfigAccessType.html
Cookie:46db1eb1/sessid=blabla; 46db1eb1/zoom-accessibility=small
Content-Length: 73
如您所见 - cookie 加倍。
替换为CURLOPT_COOKIE时
curl_setopt($curl, CURLOPT_COOKIE, '46db1eb1/sessid=blabla; 46db1eb1/zoom-accessibility=small');
POST /sysbus/NeMo/Intf/data:setFirstParameter HTTP/1.1
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1
Host: 192.168.1.1
Accept: */*
Cookie: 46db1eb1/sessid=FHjCFhn/VKgkC09y7772fXpp; 46db1eb1/sessid=blabla; 46db1eb1/zoom-accessibility=small
Content-Type:application/x-sah-ws-1-call+json; charset=UTF-8
X-Context:VCtJDc4PrVjybyFcw8jGAc3anO5mXm7GPnfgn8VES54TqwUKr4fP68PhJHtuSn2x
X-Prototype-Version:1.7
X-Requested-With:XMLHttpRequest
Referer:http://192.168.1.1/advConfigAccessType.html
Content-Length: 73
相同的 cookie 标头中的值加倍。
curl 7.26.0,Raspbian (Debian 7.8)
【问题讨论】:
-
哪个系统?我无法使用 PHP 5.5 和 curl 7.37 在 Mac 上重现它
-
还在 Ubuntu 上使用 PHP 5.5 + curl 7.35 进行了测试 - 最后一个
curl_setopt覆盖了之前的 cookie 标头 -
curl 7.26.0 (arm-unknown-linux-gnueabihf) libcurl/7.26.0 OpenSSL/1.0.1e zlib/1.2.7 libidn/1.25 libssh2/1.4.2 librtmp/2.3 on Raspbian ( Debian 7.8)。你确定它会覆盖它吗?您是从网站获取 cookie 而不是第一次手动设置吗?
-
评论略有限制,请看我的回答我是如何测试的。