php cURL设置手动cookie

时间:2018-02-23 13:18:43

标签: php curl cookies

我有一个带有此

的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手册?因为我需要在发送之前稍微修改它们

1 个答案:

答案 0 :(得分:1)

您可以将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

每一行代表一条存储的信息。在每个字段之间插入一个选项卡。

从左到右,每个字段代表的是:

- 创建可以读取变量的AND的域。

flag - 一个TRUE / FALSE值,指示给定域中的所有计算机是否都可以访问该变量。此值由浏览器自动设置,具体取决于您为域设置的值。

路径 - 变量有效的域内路径。

安全 - 一个TRUE / FALSE值,指示访问变量是否需要与域的安全连接。

到期 - 变量过期的UNIX时间。 UNIX时间定义为自1970年1月1日00:00:00 GMT以来的秒数。

name - 变量的名称。

- 变量的值。

回答您的问题

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数组的cookie.txt,请执行以下操作:

// 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');