我有一个cookie文件
.adidas.de TRUE / FALSE 1519852113 restoreBasketUrl %2Fon%2Fdemandware.store%2FSites-adidas-DE-Site%2Fde_DE%2FCart-UpdateItems%3Fpid_0%3DBB2092_610%26qty_0%3D1
.adidas.de TRUE / FALSE 1550524169 utag_main v_id:015fe2df50a60014c3cedb252f0d04073001906b01978$_sn:7$_ss:0$_st:1518989969891$_prevpage:ACCOUNT%7COVERVIEW%3Bexp-1518991769885$_pn:3%3Bexp-session$ses_id:1518987220846%3Bexp-session$ab__doubleclick:TEST%3Bexp-1521580164884
我知道我可以从cURL中的文件中读出来
curl_setopt ($ch, CURLOPT_COOKIEFILE, $cookiefile);
但是如何在没有文件的情况下设置这些cookie手册?因为我需要在发送之前稍微修改它们
你可以使用curl_setopt
函数和CURLOPT_HTTPHEADER
选项。
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Cookie: mycookie=value;mycookie2=value2"]);
[编辑]
从这个指南The Unofficial Cookie FAQ。
Netscape的cookies.txt文件的布局是这样的,每行包含一个名称 - 值对。一个示例cookies.txt文件可能有一个如下所示的条目:
.netscape.com TRUE / FALSE 946684799 NETSCAPE_ID 100103
每行代表一条存储的信息。在每个字段之间插入一个选项卡。
从左到右,每个字段代表的是:
domain - 创建AND的域,可以读取变量。
flag - 一个TRUE / FALSE值,指示给定域中的所有计算机是否都可以访问该变量。此值由浏览器自动设置,具体取决于您为域设置的值。
path - 变量有效的域内路径。
secure - 一个TRUE / FALSE值,指示访问变量是否需要与域的安全连接。
到期 - 变量将过期的UNIX时间。 UNIX时间定义为自1970年1月1日00:00:00 GMT以来的秒数。
name - 变量的名称。
value - 变量的值。
为了回答你的问题
1)在发送之前修改一下这样做:
$file = file('cookie.txt');
$cookies = [];
/*
* From the guidelines that I linked and posted above each line must contain 7 "fields" separated by tab only (The text you posted in the question is not well formatted but with some tricks we can do this)
*/
foreach ($file as $fileLine) {
$fileLine = preg_replace("/\s+/", "\t", trim($fileLine));
$fields = explode("\t", $fileLine);
if (count($fields) === 7) {
$cookies[] = [
'domain' => $fields[0],
'flag' => $fields[1],
'path' => $fields[2],
'secure' => $fields[3],
'expiration' => $fields[4],
'name' => $fields[5],
'value' => $fields[6],
];
}
}
var_dump($cookies); // Here you have all lines from your cookie file and can modify the fields such name, value or something
2)为了覆盖cookie.txt
和修改的cookie数组,请执行以下操作:
// Preserve Netscape format
$cookies = implode(PHP_EOL, array_map(function($data){
return implode("\t", $data);
}, $cookies));
file_put_contents('cookie.txt', $cookies);
3)从文件发送新的cookie(必须采用Netscape格式):
curl_setopt ($ch, CURLOPT_COOKIEFILE, 'cookie.txt');