在两个curl请求之间保存cookie

时间:2015-06-10 15:03:14

标签: http curl cookies header

我知道使用cURL我可以使用

查看收到的Cookie /标题
curl --head www.google.com

我知道我可以使用

为我的请求添加标题
curl --cookie "Key=Value" www.google.com

我目前正在测试一个需要持久性cookie的问题,而且可能会有很多问题。

  

如何在两个cURL请求之间有效保留Cookie?

如果可能,使用临时文件进行存储。

3 个答案:

答案 0 :(得分:53)

使用--cookie-jar--dump-header参数将收到的Cookie保存到文件中。 --cookie参数可以稍后从该文件中回读cookie。

  

-b, - cool< name = data>

     

(HTTP)将数据作为cookie传递给HTTP服务器。据推测,它是先前从“Set-Cookie:”行中的服务器接收的数据。数据应采用“NAME1 = VALUE1; NAME2 = VALUE2”格式。

     

如果行中没有使用'='符号,则将其视为用于从读取先前存储的Cookie行的文件名,如果它们匹配,则应在此会话中使用。使用此方法还可以激活cookie引擎,这将使curl记录传入的cookie,如果您将它与-L, - location选项结合使用,这可能很方便。从中读取cookie的文件的文件格式应该是纯HTTP标头(Set-Cookie样式)或Netscape / Mozilla cookie文件格式。

     

使用-b, - coolie指定的文件仅用作输入。不会将cookie写入文件。 要存储Cookie,请使用-c, - cool-jar选项

     

如果您使用此选项并且可能会发生多次转移,请务必小心。如果你使用NAME1 = VALUE1;格式,或在文件中使用Set-Cookie格式并且不指定域,然后为任何域发送cookie(即使在遵循重定向后),也不能由服务器设置cookie修改。如果启用了cookie引擎并且服务器设置了相同名称的cookie,则两者将在将来转移到该服务器时发送,可能不是您想要的。要解决这些问题,请在Set-Cookie中设置一个域(这样做将包括子域)或使用Netscape格式。

     

如果多次使用此选项,将使用最后一个选项。

  

-c, - cool-jar<文件名>

     

(HTTP)指定curl在完成操作后写入所有cookie的文件。 Curl会写入先前从指定文件读取的所有Cookie以及从远程服务器接收的所有Cookie 。如果没有已知的cookie,则不会写入任何数据。该文件将使用Netscape cookie文件格式编写。如果将文件名设置为单个短划线“ - ”,则cookie将写入stdout。

     

此命令行选项将激活cookie引擎,该引擎使curl记录并使用cookie。激活它的另一种方法是使用-b, - cookie选项。

     

如果无法创建或写入cookie jar,整个curl操作不会失败甚至清楚地报告错误。使用-v会显示一个警告,但这是对这种可能致命的情况唯一可见的反馈。

     

由于此选项不会导出以Set-Cookie格式导入但没有域名的7.43.0 cookie。

     

如果多次使用此选项,将使用最后指定的文件名。

  

-D, - dump-header< file>

     

将协议标头写入指定的文件。

     

当您想要存储HTTP站点发送给您的标头时,此选项很方便使用。然后可以使用-b, - cool选项在第二次curl调用中读取标题中的Cookie! -c, - cool-jar选项是存储cookie的更好方法

     

在FTP中使用时,FTP服务器响应行被视为“标题”,因此保存在那里。

     

如果多次使用此选项,将使用最后一个

或者,不要使用命令行cURL app,而是编写一些使用libCurl library的代码。这将使您更直接地控制cookie处理。 libCurl有几个与HTTP cookie相关的功能:

curl_easy_getinfo()的选项:

curl_easy_setopt()的选项:

然后,您可以根据需要存储Cookie,并根据需要将它们分配给以后的HTTP会话。

答案 1 :(得分:2)

curl -b cookie.txt -c cookie.txt <url>curl --cookie cookie.txt --cookie-jar cookie.txt <url>都将存储和发送已保存的Cookie。

答案 2 :(得分:0)

我要感谢这里的所有人帮助我找到使用CURL登录到我的wordpress网站的解决方案。这是我的一点贡献,希望对将来碰到这一点的人有所帮助

对于Windows 10版本比1706更新的版本,可以从命令行使用curl。

curl -c c:\Users\<your-name>\Desktop\cookie.txt -F "log=<your username>" -F "pwd=<your-pwd>" https://acme.net/wp-login.php

您将不会在终端中看到任何回复。它会自动刷新,但您的Cookie已存储。

然后在下面键入以下内容,以读取和发送刚存储的cookie。

curl -b c:\Users\<your-name>\Desktop\cookie.txt -L https://acme.net/my-profile/

只有登录用户才能访问的整个网页将在您的终端内显示,包括通过javascript动态加载的所有数据。

即使WP登录URL的终点是“ / register / login”或“ / login”,我仍然建议您使用“ /wp-login.php”作为端点。这是因为某些WP主题在其登录页面的隐藏输入中具有登录随机数。本机WP登录页面没有此页面。

您可以参考的其他来源:

https://wpmayor.com/login-to-wordpress-dashboard-via-curl/

https://gist.github.com/subfuzion/08c5d85437d5d4f00e58

https://www.youtube.com/watch?v=B4ilccLUQVs

https://makandracards.com/makandra/48262-how-to-use-cookies-with-curl