【问题标题】:curb (curl for Ruby) not using cookiejar properly遏制(Ruby 的 curl)没有正确使用 cookiejar
【发布时间】:2011-06-01 19:40:13
【问题描述】:

我看到了一些奇怪的行为,它是 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

在这里,我想通过某种方式检索 amazon.com 放置的 cookie,但我无法这样做。我指定为我的 cookiejar 的 cookies.txt 文件不存在,#cookies 方法只返回 nil。但是,如果我退出 irb,cookies.txt 文件就会出现,其中包含正确的 cookie。有什么建议吗?

谢谢

【问题讨论】:

  • 在稍微挖掘了遏制的来源之后,我了解到 Curl::Easy#cookiejar= 方法正在设置提到的 CURLOPT_COOKIJAR 选项here,并且根据文档,cookie在调用 'curl_easy_cleanup(3)' 之前不应该将其写入该文件(这必须在您关闭 irb 时发生,而且我也倾向于在您调用 Curl::Easy#close 时发生)。我仍然无法弄清楚如何在关闭 irb/Curl::Easy 实例之前访问 cookie....
  • cookies 保存在句柄中,因此如果您使用相同的句柄进行另一个请求,cookie 将被相应地使用
  • 我知道这一点,但我正在使用遏制来编写一些测试,这些测试需要我检查某些 cookie 是否设置正确。因此,我有兴趣查看 cookie jar 中的内容,而不是使用 cookie jar 来发出后续请求。有任何想法吗?谢谢。

标签: ruby cookies curl


【解决方案1】:

我不知道 ruby​​ 绑定是如何工作的,但是在底层的 libcurl API 中,cookie jar 直到句柄被 curl_easy_cleanup() “杀死”后才会保存。我假设许多 OO 语言不会在 libcurl“对象”上调用该函数,直到它以某种方式被杀死/垃圾收集,或者如果绑定提供了一种明确杀死 libcurl 对象/句柄的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-28
    • 1970-01-01
    • 2012-01-31
    相关资源
    最近更新 更多