抑制(Ruby为curl)未正确使用cookiejar

抑制(Ruby为curl)未正确使用cookiejar,ruby,cookies,curl,Ruby,Cookies,Curl,我在路边看到了一些奇怪的行为,这是cookiejar。在irb中: >> require 'curl' => true >> a = Curl::Easy.new => #<Curl::Easy> >> a.enable_cookies = true => true >> a.cookiejar = "cookies.txt" => "cookies.txt" >> a.url = "http://w

我在路边看到了一些奇怪的行为,这是cookiejar。在irb中:

>> require 'curl'
=> true
>> a = Curl::Easy.new
=> #<Curl::Easy>
>> a.enable_cookies = true
=> true
>> a.cookiejar = "cookies.txt"
=> "cookies.txt"
>> a.url = "http://www.amazon.com"
=> "http://www.amazon.com"
>> a.perform
=> true
>需要“卷曲”
=>正确
>>a=Curl::Easy.new
=> #
>>a.enable_cookies=true
=>正确
>>a.cookiejar=“cookies.txt”
=>“cookies.txt”
>>a.url=”http://www.amazon.com"
=> "http://www.amazon.com"
>>表演
=>正确
在这里,我想有一些方法来检索amazon.com放置的cookies,但我无法这样做。我指定为我的cookiejar的cookies.txt文件不存在,#cookies方法只返回nil。但是,如果我退出irb,cookies.txt文件将显示,其中包含正确的cookies。有什么建议吗


谢谢

我不知道ruby绑定是如何工作的,但是在底层的libcurl API中,cookie jar在句柄被()杀死之前不会被保存。我想很多OO语言都不会在libcurl“object”上调用该函数,除非它以某种方式被终止/垃圾收集,或者绑定提供了一种显式终止libcurl对象/句柄的方法。

在稍微挖掘一下它的源代码之后,我了解到Curl::Easy#cookiejar=方法正在设置前面提到的CURLOPT#u COOKIJAR选项,并且根据文档,在调用“Curl#Easy#u cleanup(3)”之前,cookies不应该写入该文件(这必须在您关闭irb时发生,我还了解到,在您调用Curl::Easy#close时发生)。在关闭irb/Curl::Easy实例之前,我仍然不知道如何访问cookies…cookies保存在句柄中,因此如果您使用相同的句柄执行另一个请求,cookies将被使用,我知道,但我正在使用路缘编写一些测试,要求我检查某些cookie是否设置正确。因此,我感兴趣的是查看cookie jar中的内容,而不是使用cookie jar进行后续请求。有什么想法吗?谢谢