我有一个URL,我使用HTTPGET将一个查询传递沿着一个页面,最新版本(net/http
)的情况是脚本不会超出302响应。HTTP客户端、net/http、Rest-Client、客户端、用户端、服务器端...
我需要一种方法来继续到最后一页,以验证该页html的属性标记。重定向是由于移动的用户代理命中一个页面,重定向到移动视图,因此移动用户代理在头。下面是我的代码,因为它是今天:
require 'uri'
require 'net/http'
class Check_Get_Page
def more_http
url = URI.parse('my_url')
req, data = Net::HTTP::Get.new(url.path, {
'User-Agent' => 'Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_2 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8H7 Safari/6533.18.5'
})
res = Net::HTTP.start(url.host, url.port) {|http|
http.request(req)
}
cookie = res.response['set-cookie']
puts 'Body = ' + res.body
puts 'Message = ' + res.message
puts 'Code = ' + res.code
puts "Cookie \n" + cookie
end
end
m = Check_Get_Page.new
m.more_http
任何建议将不胜感激!
6条答案
按热度按时间mutmk8jj1#
要跟踪重定向,您可以执行如下操作(taken from ruby-doc)
重定向后
hmae6n7t2#
给定重定向的URL
A.
Net::HTTP
当有太多的重定向时,请确保您处理这种情况。
B.
OpenURI
型
OpenURI::OpenRead#open
默认情况下遵循重定向,但不限制重定向的次数。vzgqcmou3#
我写了另一个类,基于这里给出的例子,非常感谢大家。我添加了cookie,参数和异常,最后得到了我需要的:https://gist.github.com/sekrett/7dd4177d6c87cf8265cd
7lrncoxx4#
对我有用的参考资料如下:http://shadow-file.blogspot.co.uk/2009/03/handling-http-redirection-in-ruby.html
与大多数示例(包括这里的公认答案)相比,它更健壮,因为它处理的URL只是一个域(http://example.com-需要添加一个/),专门处理SSL,以及相对URL。
当然,在大多数情况下,使用RESTClient这样的库会更好,但有时底层细节是必要的。
3zwjbxry5#
也许你可以在这里使用curb-fu gem https://github.com/gdi/curb-fu,唯一的问题是一些额外的代码,使它跟随重定向。我以前用过下面的代码。希望它能有所帮助。
brqmpdu16#
如果不需要关心每次重定向时的详细信息,可以使用库Mechanize
它将返回目标页面。或者您可以通过以下方式关闭重定向:
或者,您也可以根据请求更改某些设置
型