将 Firefox 和 Chrome cookie 导入 libcurl
Importing Firefox and Chrome cookies to libcurl
我在Windows 7下使用Code::Blocks与MinGW。我正在使用libcurl编写一个多线程网络爬虫,使用启用了CURL_LOCK_DATA_COOKIE的CURLSH对象在不同线程之间共享cookie。句柄收到 Cookie 后,它将在每个其他句柄之间成功共享。但是,我需要从Firefox或Chrome复制初始的cookie集。我发现他们使用 sqlite 存储 cookie,我已经能够从我的程序中读取它们中的 cookie。问题是,我如何将这些饼干提供给 libcurl?理想情况下,应该有某种方法将这些 cookie 提供给我的 CURLSH 对象,以便将它们分发到每个句柄。我没有发现这样的事情。
按照本文档,我可以尝试将从浏览器中读取的 cookie 保存到 cookie.txt 文件中,这简化为查找 Firefox/Chrome 使用的数据库中的字段与 Netscape 格式之间的对应关系。Netscape使用以下格式:
域标志路径安全过期名称值
问题出在标志字段上。我不知道在那里写什么。Firefox 使用以下字段(文件 cookie.sqlite,table *moz_cookies*),它们与 Netscape 格式相对应,如下所示(这是正确的吗?):
主机???路径是安全到期名称值
Chrome 使用以下字段(文件 Cookie、Table Cookie):
host_key ???路径安全expires_utc名称值
因此,要创建此cookie.txt文件,我只缺少该标志字段。上面链接的文件说:
flag - 一个 TRUE/FALSE 值,指示给定域中的所有计算机是否 可以访问该变量。此值由 浏览器,具体取决于您为域设置的值。
这并没有真正告诉我在那里写什么。但是,编写文件然后读取它似乎是不必要的工作,因为我将首先在 RAM 中加载来自 Firefox/Chrome 的 cookie,并且我应该能够将它们直接交给 libcurl,而无需通过硬盘驱动器。我找到了CURLOPT_COOKIE选项,但它缺少一些字段(即域)。此外,该选项似乎不会保存 cookie 以供以后使用。看起来我需要只使用相应域的 cookie 为每笔交易调用它(如果这些 cookie 被更改怎么办?我不想手动检查更改,因为 libcurl 可以做到这一点)。
那么,鉴于我在内存中拥有来自Firefox/Chrome的所有cookie,我如何将它们提供给libcurl?如果唯一的选择是使用 cookie.txt 文件,我应该在标志字段中写什么?
我已经找到了答案,CURLOPT_COOKIELIST(我把它与CURLINFO_COOKIELIST混淆了,它只能用于读取cookie)。使用 CURLOPT_COOKIELIST,我可以将我的 cookie 作为 HTTP 标头输入,它不需要该标志字段。我只需要为日期提供格式。看起来为任何句柄指定 cookie 就足以在 CURLSH 对象中设置它们,因为我可以在一个句柄中设置它们并在任何其他句柄中读取它们。
- 尝试导入pybind-opencv模块时出现libgtk错误
- 导入库可以跨dll版本工作吗
- 发送一个带有libcurl C++问题的帖子请求:s
- 建议在运行时将带有类实例的列表从c++导入qml
- 使用libcurl提交批量url的正确BING Api POST url是什么
- 导入/导出变量时出错
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 将QT项目导入Visual Studio 2019会给我带来很多LNK2001错误
- 是否可以将函数导入命名空间,但不能导出它?
- 在 libcurl 连接池中预创建连接
- libcurl 和 DNS ttl 中的内部连接管理
- 如何在 cmake 库中包含 libcurl
- 如何将 CLion C++ 项目导入 Visual Studio?
- Python 3.8 不能与 Pybind11 一起导入 [Windows]
- 如何应用 libcurl 的持久连接选项
- 无法将标准库导入本机 android 项目中的头文件
- 尝试了解在导入的静态方法上使用删除方法时的错误
- VS 2015 链接错误 无法构建依赖于 libcurl 的项目
- 将 Firefox 和 Chrome cookie 导入 libcurl
- 如何将Libcurl导入到我的C++代码中