gpt4 book ai didi

Ruby Mechanize 不通过请求传递 cookie

转载 作者:数据小太阳 更新时间:2023-10-29 08:13:35 24 4
gpt4 key购买 nike

我在使用 Ruby mechanize 时遇到问题,它在手动发布请求后的 302 重定向期间丢失了 cookie。

1) 加载页面

agent.get(url)

日志:

I, [2011-09-21T19:50:46.077628 #5040]  INFO -- : Net::HTTP::Get: /some_site
D, [2011-09-21T19:50:46.077628 #5040] DEBUG -- : request-header: accept => */*
D, [2011-09-21T19:50:46.077628 #5040] DEBUG -- : request-header: user-agent => Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.4b) Gecko/20030516 Mozilla Firebird/0.6
D, [2011-09-21T19:50:46.077628 #5040] DEBUG -- : request-header: accept-encoding => gzip,deflate,identity
D, [2011-09-21T19:50:46.077628 #5040] DEBUG -- : request-header: accept-charset => ISO-8859-1,utf-8;q=0.7,*;q=0.7
D, [2011-09-21T19:50:46.077628 #5040] DEBUG -- : request-header: accept-language => en-us,en;q=0.5
D, [2011-09-21T19:50:46.077628 #5040] DEBUG -- : request-header: host => site.com
I, [2011-09-21T19:50:47.965232 #5040] INFO -- : status: Net::HTTPOK 1.1 200 OK
D, [2011-09-21T19:50:47.965232 #5040] DEBUG -- : response-header: date => Wed, 21 Sep 2011 17:50:46 GMT
D, [2011-09-21T19:50:47.965232 #5040] DEBUG -- : response-header: server => Apache/2.2.9 (Debian) mod_ssl/2.2.9 OpenSSL/0.9.8g PHP/5.2.17 mod_perl/2.0.4 Perl/v5.10.0
D, [2011-09-21T19:50:47.965232 #5040] DEBUG -- : response-header: x-powered-by => PHP/5.2.17
D, [2011-09-21T19:50:47.965232 #5040] DEBUG -- : response-header: set-cookie => frontend=9d47f1e106d4f2efcc2830988eb66610; expires=Wed, 21-Sep-2011 18:50:46 GMT; path=/; domain=site.com
D, [2011-09-21T19:50:47.965232 #5040] DEBUG -- : response-header: expires => Thu, 19 Nov 1981 08:52:00 GMT
D, [2011-09-21T19:50:47.965232 #5040] DEBUG -- : response-header: cache-control => no-store, no-cache, must-revalidate, post-check=0, pre-check=0
D, [2011-09-21T19:50:47.965232 #5040] DEBUG -- : response-header: pragma => no-cache
D, [2011-09-21T19:50:47.965232 #5040] DEBUG -- : response-header: content-encoding => gzip
D, [2011-09-21T19:50:47.965232 #5040] DEBUG -- : response-header: vary => Accept-Encoding,User-Agent
D, [2011-09-21T19:50:47.965232 #5040] DEBUG -- : response-header: keep-alive => timeout=15, max=100
D, [2011-09-21T19:50:47.965232 #5040] DEBUG -- : response-header: connection => Keep-Alive
D, [2011-09-21T19:50:47.965232 #5040] DEBUG -- : response-header: transfer-encoding => chunked
D, [2011-09-21T19:50:47.965232 #5040] DEBUG -- : response-header: content-type => text/html; charset=UTF-8
D, [2011-09-21T19:50:48.370832 #5040] DEBUG -- : saved cookie: frontend=9d47f1e106d4f2efcc2830988eb66610

这一切都很好,对我来说看起来不错。设置 session cookie,并将其添加到 Mechanize cookie jar 中。

pp agent.cookies[0]

显示 cookie 前端=没问题。

2)向服务器发送POST请求

agent.post(url,{"product" => "10000","qty" => "1"})

这不会将 cookie 发送到服务器。我收到一条错误消息(“未启用 cookie,请启用以继续”)。 Mechanize 是否仅在指定时通过 POST 请求传递 cookie?

cookie 不会发送到服务器,除非我专门将它添加到 POST 请求中。

agent.post(url,{"product" => "10000","qty" => "1"},'cookie' => agent.cookies[0])

在这种情况下,记录器显示:

D, [2011-09-21T19:50:48.480032 #5040] DEBUG -- : request-header: cookie => frontend=9d47f1e106d4f2efcc2830988eb66610

3) 服务器执行 302 重定向。

对于重定向页面的GET请求,Mechanize不传递session cookie。因此, session 丢失并由服务器设置新的 session cookie。

I, [2011-09-21T19:50:49.182034 #5040]  INFO -- : follow redirect to: http://site.com/redirect/
I, [2011-09-21T19:50:49.182034 #5040] INFO -- : Net::HTTP::Get: /redirect/
D, [2011-09-21T19:50:49.182034 #5040] DEBUG -- : request-header: accept => */*
D, [2011-09-21T19:50:49.182034 #5040] DEBUG -- : request-header: user-agent => Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.4b) Gecko/20030516 Mozilla Firebird/0.6
D, [2011-09-21T19:50:49.182034 #5040] DEBUG -- : request-header: accept-encoding => gzip,deflate,identity
D, [2011-09-21T19:50:49.182034 #5040] DEBUG -- : request-header: accept-charset => ISO-8859-1,utf-8;q=0.7,*;q=0.7
D, [2011-09-21T19:50:49.182034 #5040] DEBUG -- : request-header: accept-language => en-us,en;q=0.5
D, [2011-09-21T19:50:49.182034 #5040] DEBUG -- : request-header: host => site.com
D, [2011-09-21T19:50:49.182034 #5040] DEBUG -- : request-header: referer => http:/site.com/referrerlink/
I, [2011-09-21T19:50:49.728035 #5040] INFO -- : status: Net::HTTPOK 1.1 200 OK
D, [2011-09-21T19:50:49.728035 #5040] DEBUG -- : response-header: date => Wed, 21 Sep 2011 17:50:49 GMT
D, [2011-09-21T19:50:49.728035 #5040] DEBUG -- : response-header: server => Apache/2.2.9 (Debian) mod_ssl/2.2.9 OpenSSL/0.9.8g PHP/5.2.17 mod_perl/2.0.4 Perl/v5.10.0
D, [2011-09-21T19:50:49.728035 #5040] DEBUG -- : response-header: x-powered-by => PHP/5.2.17
D, [2011-09-21T19:50:49.728035 #5040] DEBUG -- : response-header: set-cookie => frontend=c08477bb03473d68acd83ed81ed56101; expires=Wed, 21-Sep-2011 18:50:49 GMT; path=/; domain=site.com
D, [2011-09-21T19:50:49.728035 #5040] DEBUG -- : response-header: expires => Thu, 19 Nov 1981 08:52:00 GMT
D, [2011-09-21T19:50:49.728035 #5040] DEBUG -- : response-header: cache-control => no-store, no-cache, must-revalidate, post-check=0, pre-check=0
D, [2011-09-21T19:50:49.728035 #5040] DEBUG -- : response-header: pragma => no-cache
D, [2011-09-21T19:50:49.728035 #5040] DEBUG -- : response-header: content-encoding => gzip
D, [2011-09-21T19:50:49.728035 #5040] DEBUG -- : response-header: vary => Accept-Encoding,User-Agent
D, [2011-09-21T19:50:49.728035 #5040] DEBUG -- : response-header: content-length => 6441
D, [2011-09-21T19:50:49.728035 #5040] DEBUG -- : response-header: keep-alive => timeout=15, max=98
D, [2011-09-21T19:50:49.728035 #5040] DEBUG -- : response-header: connection => Keep-Alive
D, [2011-09-21T19:50:49.728035 #5040] DEBUG -- : response-header: content-type => text/html; charset=UTF-8

关于如何防止 Mechanize 在 302 重定向期间丢失 cookie 的任何建议?由于网站上使用了 javascript,我只能手动 POST 请求。

Mechanize 的这种常见行为是否仅在明确指定时使用手动 POST 请求发送 cookie(根据我使用 POST 请求的经验,直到现在我还没有丢失 session cookie 的问题)。

感谢您的帮助。

谢谢,克里斯

最佳答案

我在重定向时遇到了同样的问题,重定向后 cookie 没有保存在 jar 中。我从 github 存储库(版本 2.0.2)下载了最新版本的 Mechanize,问题似乎已解决。不确定代码库中的哪些更改解决了这个问题,但 cookie 现在似乎在重定向后保存了。

当您尝试此修复时,请确保您使用的是 gem 的 2.0.2 版,而不是本地安装的 gem 的另一个版本。这让我有一段时间了。 :)

关于Ruby Mechanize 不通过请求传递 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7504893/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com