我知道使用cURL
可以查看使用过的cookie/头信息,方法是:
curl --head www.google.com
我知道可以通过添加头部信息来发送请求
curl --cookie "Key=Value" www.google.com
我目前正在测试一个需要使用持久性cookie的问题,而且可能会有很多cookie。
如何在两个
cURL
请求之间高效地保留cookie?
如果可能,使用临时文件进行存储。
--cookie-jar
或--dump-header
参数将收到的cookie保存到文件中。--cookie
参数可以从该文件中读取cookie。(HTTP) 指定curl在完成操作后要写入哪个文件中的所有cookie。 Curl会将之前从指定文件读取的所有cookie以及从远程服务器接收到的所有cookie都写入该文件。如果没有已知的cookie,则不会写入任何数据。文件将使用Netscape cookie文件格式进行编写。如果将文件名设置为单破折号“-”,则cookie将被写入stdout。
此命令行选项将激活cookie引擎,使curl记录和使用cookie。另一种激活方法是使用-b、--cookie选项。
如果无法创建或写入cookie jar,则整个curl操作不会失败,甚至不会清楚地报告错误。使用-v将显示警告,但这是您在可能致命的情况下唯一可见的反馈。
自7.43.0版本以来,以Set-Cookie格式导入但没有域名的cookie不会通过此选项导出。
如果多次使用此选项,则将使用最后指定的文件名。
-D、--dump-header <file>
将协议头写入指定文件。
当您要存储HTTP站点发送给您的标头时,此选项非常方便。然后可以通过使用-b、--cookie选项在第二个curl调用中读取标头中的cookie!-c、--cookie-jar选项是存储cookie的更好方法。
在FTP中使用时,FTP服务器响应行被认为是“标头”,因此被保存在那里。
如果多次使用此选项,则将使用最后一个。
除了使用命令行cURL应用程序,还可以编写一些使用libCurl库的代码。这样就可以更直接地控制cookie处理了。libCurl有几个与HTTP cookie相关的功能:
curl_easy_getinfo()
选项:
curl_easy_setopt()
选项:
CURLOPT_COOKIE - 设置HTTP Cookie头的内容
CURLOPT_COOKIEFILE - 从文件中读取cookie的文件名
CURLOPT_COOKIEJAR - 存储cookie的文件名
CURLOPT_COOKIESESSION - 开始新的cookie会话
CURLOPT_COOKIELIST - 添加或操作保存在内存中的cookie
然后您可以按照自己的方式存储cookie,并根据需要分配给后续HTTP会话。
curl -b cookie.txt -c cookie.txt <url>
或 curl --cookie cookie.txt --cookie-jar cookie.txt <url>
均可存储和发送保存的 cookies。
对于已接受的答案进行扩展。可以使用--cookie和--cookie-jar标志而无需进行文件写入,可以使用进程替换:
cookie=$(curl -c - <url>)
curl --cookie <(echo "$cookie") <url>
我要感谢所有人帮助我找到使用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/
-c
标志,这是在我问了这个问题之后 - 从来没有意识到这里有一个答案发布。谢谢。 - Matt ClarkSet-Cookie
头,则--cookie-jar
(或-b
)选项不会保存任何内容,对吗?我需要登录一个带有 re-captcha 的网站,但不得不采用 通过保存已经具有 cookies 的curl
命令的 Chrome 来解决问题,并只添加了-b -
(以打印到stdout
),但是没有成功。 - toraritte