将Firefox和Chrome Cookie导入libcurl

时间:2013-09-21 23:52:49

标签: c++ c cookies libcurl

我在Windows 7下使用Code :: Blocks with MinGW。 我正在编写一个带有libcurl的多线程Web爬虫,使用CURLSH对象启用CURL_LOCK_DATA_COOKIE以在不同线程之间共享cookie。 一旦句柄收到cookie,它就会在每个其他句柄之间成功共享。但是,我需要从Firefox或Chrome复制初始的cookie集。我发现他们使用sqlite存储cookie,我已经能够从我的程序中读取这两个cookie。问题是,如何将这些cookie提供给libcurl?理想情况下,应该有一些方法将这些cookie提供给我的CURLSH对象,以便它们分发到每个句柄。我没有找到这样的东西。

关注this document,我可以尝试将我从浏览器中读取的Cookie保存到 cookies.txt 文件中,这样可以减少查找所使用的数据库中字段之间的对应关系Firefox / Chrome和Netscape格式。 Netscape使用以下格式:

  

域标志路径安全过期名称值

标志字段出现问题。我不知道该写些什么。 Firefox使用以下字段(文件 cookies.sqlite ,表* moz_cookies *),它们与Netscape格式对应如下(这是正确的吗?):

  

主持人??? path isSecure到期名称值

Chrome使用以下字段(文件 Cookie ,表 Cookie ):

  

host_key ??? path secure expires_utc name value

因此,要创建此 cookies.txt 文件,我只缺少该标记字段。上面链接的文件说:

  

flag - 一个TRUE / FALSE值,指示给定域中是否所有计算机   可以访问变量。该值由。自动设置   浏览器,具体取决于您为域设置的值。

哪个不能告诉我在那里写什么。 然而,写一个文件然后阅读它似乎是不必要的工作,因为我将首先从RAM中加载来自Firefox / Chrome的cookie,并且我应该能够直接将它们提供给libcurl而无需通过硬盘驱动器。我找到了CURLOPT_COOKIE选项,但缺少一些字段(即域名)。此外,该选项似乎不保存后续使用的cookie。看起来我需要为每个只有相应域的cookie的事务调用它(如果这些cookie被更改怎么办?我不想手动检查更改,因为libcurl可以这样做。)

因此,鉴于我在内存中拥有来自Firefox / Chrome的所有Cookie,如何将它们提供给libcurl?如果唯一的选择是使用 cookies.txt 文件,我应该在标记字段中写什么?

1 个答案:

答案 0 :(得分:0)

我找到了答案,CURLOPT_COOKIELIST(我将其与CURLINFO_COOKIELIST混淆,后者只能用于读取Cookie)。使用CURLOPT_COOKIELIST,我可以输入我的cookie作为HTTP标头,不需要该标志字段。我只需要给出日期格式。看起来为任何句柄指定cookie足以在CURLSH对象中设置它们,因为我可以在一个句柄中设置它们并将它们读出任何其他句柄。