php cURL设置手动cookie

问题描述 投票:1回答:1

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

php curl cookies
1个回答
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

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

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

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');
© www.soinside.com 2019 - 2024. All rights reserved.