如何使用Ruby中的curl将cookies从一个页面传递到另一个页面?
我正在用ruby做一个视频爬虫。在那里,我必须通过启用cookies和下载页面来登录页面。为此,我使用ruby中的CURL库。我可以成功登录,但我无法使用curl下载其中的页面。我如何修复此问题或下载其他页面 我的代码是如何使用Ruby中的curl将cookies从一个页面传递到另一个页面?,ruby,cookies,curl,Ruby,Cookies,Curl,我正在用ruby做一个视频爬虫。在那里,我必须通过启用cookies和下载页面来登录页面。为此,我使用ruby中的CURL库。我可以成功登录,但我无法使用curl下载其中的页面。我如何修复此问题或下载其他页面 我的代码是 curl = Curl::Easy.new(1st url) curl.follow_location = true curl.enable_cookies = true curl.cookiefile = "cookie.txt" curl.cookiejar = "cook
curl = Curl::Easy.new(1st url)
curl.follow_location = true
curl.enable_cookies = true
curl.cookiefile = "cookie.txt"
curl.cookiejar = "cookie.txt"
curl.http_post(1st url,field)
curl.perform
curl = Curl::Easy.perform(2nd url)
curl.follow_location = true
curl.enable_cookies = true
curl.cookiefile = "cookie.txt"
curl.cookiejar = "cookie.txt"
curl.http_get
code = curl.body_str
使这类事情变得非常简单(它将处理存储Cookie等事情)。自动启用Cookie,就像这样
从HTTPClient文档:
clnt = HTTPClient.new
clnt.get_content(url1) # receives Cookies.
clnt.get_content(url2) # sends Cookies if needed.
发布表单也很容易:
body = { 'keyword' => 'ruby', 'lang' => 'en' }
res = clnt.post(uri, body)
在编写类似的“post-then-get”脚本时,我看到ruby/Urb(我在ruby 1.8中使用版本0.7.15)似乎忽略了Curl::Easy对象的cookiejar/cookiefile字段。如果我设置了这些字段中的任何一个,并且http_post成功完成,则不会创建cookiejar或cookiefile文件。此外,curl.cookies在curl.http_发布后仍然为零,但是cookies是在curl对象中设置的。我保证:) 我认为你错在这里:
curl = Curl::Easy.perform(2nd url)
路缘文档说明这将创建一个新对象。该新对象未设置任何现有Cookie。如果您将代码更改为如下所示,我相信它应该可以工作。我还删除了curl.perform作为第一个url,因为curl.http_post已经隐式执行了“perform”。基本上,您在尝试http\u-get之前已经发布了两次http\u-post'ing
curl = Curl::Easy.new(1st url)
curl.follow_location = true
curl.enable_cookies = true
curl.http_post(1st url,field)
curl.url = 2nd url
curl.http_get
code = curl.body_str
如果这似乎仍然不适用于您,您可以通过添加
curl.verbose = true
以前
curl.http_post
您的Curl::Easy对象将从服务器响应中获得的所有头转储到$stdout,在其中的某个地方您应该看到一行,说明它添加/设置了cookie。我现在没有任何示例输出,但我会尽快发布后续内容。您应该始终发布代码。当我们可以从你现在的位置开始时,这会使帮助你变得更容易。