使用curl发送cookie

73

我正在使用curl来获取cookie,代码如下:

curl -c cookies.txt url

然后我从cookies.txt文件中解析出所需的cookie,并带着该cookie重新发送请求。

curl -b "name=value" url 

这是发送 cookie 的正确方式吗?是否有更简单的方法?

4个回答

105
你可以使用"-b"指定一个cookie文件,读取其中的cookies。
在许多情况下,将-c-b使用同一个文件是你想要的:
curl -b cookies.txt -c cookies.txt http://example.com

更进一步

仅使用-c将使curl在没有cookie的情况下启动,但仍会解析和理解cookie,如果使用重定向或多个URL,则它将在单次调用中使用接收到的cookie,然后在最后将它们全部写入输出文件。

-b选项将一组初始cookie馈送到curl中,以便它在启动时知道它们,并激活curl的cookie解析器,以便它解析和使用传入的cookie。

另请参阅

Everything curl书中的cookies chapter章节。


7
我希望--cookie-jar的man页面不要写 "This command line option will activate the cookie engine that makes curl record and use cookies."(这条命令行选项将激活cookie引擎,使curl记录并使用cookies)[我加粗了],因为这让人误以为只有使用--cookie-jar就会发送cookie,这是错误的。 - blahdiblah
1
@blahdiblah:没错。如果你在命令行中使用--cookie-jar参数,先接收cookies然后跟随重定向到第二个页面,它将使用第一页的cookies(假设它们匹配等)。只是它不会从任何文件中读取任何初始cookies。 - Daniel Stenberg
是的,man页面误导了我。在使用-c选项时,我以为自己正在发送cookie,直到我使用了-v选项并发现它没有发送它们。 - deltaray
1
你能分享一下 cookies.txt 的格式吗?它是什么样子的? - macemers
1
现在man文件更清晰了:请注意,使用-b、--cookie指定的文件仅用作输入。不会将任何cookie存储在该文件中。要存储cookie,请使用-c、--cookie-jar选项,或者您甚至可以使用-D、--dump-header选项将HTTP头保存到文件中! - ErichBSchulz

17

.example.com TRUE / FALSE 1560211200 MY_VARIABLE MY_VALUE

这里是cookies文件格式,每个cookie占用一行,每行由以下七个用制表符分隔的字段组成:

  • domain - 创建并可以读取变量的域名。
  • flag - 一个TRUE/FALSE值,指示给定域中的所有计算机是否可以访问变量。该值是根据您为域设置的值自动设置的浏览器。
  • path - 变量在域内有效的路径。
  • secure - 一个TRUE/FALSE值,指示需要使用与域的安全连接才能访问变量。
  • expiration - 变量过期的UNIX时间。UNIX时间被定义为自1970年1月1日00:00:00 GMT以来的秒数。
  • name - 变量的名称。
  • value - 变量的值。

参考自http://www.cookiecentral.com/faq/#3.5


请注意,文件中的值必须用制表符而不是空格分隔。 - Jeiwan

11
如果你在Firefox上安装了Firebug,只需打开该URL。在网络面板中,右键单击并选择复制为cURL。您可以查看此Web调用的所有curl参数。

1
非常烦人,在官网https://ec.haxx.se/http/http-cookies上没有cookie文件示例。
最后,我发现如果你的文件内容只是像这样被复制,它不起作用。
foo1=bar;foo2=bar2

我猜格式必须符合@Agustí Sánchez所说的样式。可以通过-c测试在网站上创建cookie文件。

所以尝试这种方式,它有效。

curl -H "Cookie:`cat ./my.cookie`"   http://xxxx.com

你可以直接从Chrome控制台网络标签复制cookie。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接