如何使 curl 接受安全 cookie 公开的 http 连接

how to make curl accept secure cookies overt http connection

我正在使用 curl 连接到发回安全标记 cookie 的 http 服务器,我发现 curl 不处理此类 cookie(通过 http 连接接收的安全 cookie),换句话说:即使使用-c cookieFile switch,这样的cookies是不会保存的。

解决方法是使用 -D 开关来保存所有 headers 然后手动(外部卷曲)从文件中读取 cookie 并将其设置在 curl 命令中以将其发送回服务器.

我想知道是否有可能(可能是我缺少一些 curl 选项)使 curl 支持此类 cookie?我试图查看 curl 手册,但对我的用例没有任何用处。

提前致谢,

TL;DR: 对于最新版本的 cURL,不再可能 使用 secure 属性保存 cookie结合 cookie 相关开关。

根据documentation cURL removed the ability to save cookies with the secure attribute in order to satisfy the RFC draft draft-ietf-httpbis-cookie-alone-01。此 RFC 草案规定,如果所述 cookie 通过 HTTPS 传输,则 secure cookie 仅应由 HTTP 客户端处理、保存或覆盖。

我刚刚偶然发现了完全相同的问题,所以我可以提供两种选择:

  1. 使用功能实现前的 cURL 版本
    • cURL < v7.46.0
    • 查看导致此行为的相应 Github issue
  2. 使用 curl -icurl -D 手动转储 headers 并提取 cookie
    • 保存所有 secure cookie 并将它们保存在文件中的示例 cookies.txt
     curl -i http://server.com | grep "Set-Cookie: " | sed 's/Set-Cookie: //g' > cookies.txt
    

现在,如果您不使用里面的饼干,那么饼干罐就毫无用处。特别是关于第二种选择,可能需要删除 Secure 属性以使 cURL 将保存的 cookie 发送回 Web 服务器。