2

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

一种解决方法是使用-Dswitch 保存所有标头,然后手动(从外部到 curl)从文件中读取 cookie 并将其设置在 curl 命令中以将其发送回服务器。

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

提前致谢,

4

1 回答 1

1

TL;DR:在最新版本的 cURL 中,无法再将带有secure属性的 cookie 与 cookie 相关的开关一起保存。

根据文档, cURL 删除了使用该secure属性保存 cookie 的功能,以满足 RFC 草案draft-ietf-httpbis-cookie-alone-01。该 RFC 草案规定,secure只有在 HTTP 客户端通过 HTTPS 传输 cookie 时,cookie 才应该由 HTTP 客户端处理、保存或覆盖。

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

  1. 在实现该功能之前使用 cURL 版本
    • 卷曲 < v7.46.0
    • 请参阅导致此行为的相应Github 问题
  2. curl -i使用or手动转储标头curl -D并提取 cookie
    • 保存所有securecookie 并将它们保存在文件中的示例cookies.txt
     curl -i http://server.com | grep "Set-Cookie: " | sed 's/Set-Cookie: //g' > cookies.txt
    

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

于 2020-10-30T17:13:53.800 回答