我有一个URL,我使用HTTP GET将查询传递到页面.最新版本(在net/http中)的情况是,脚本没有超出302响应的范围.我try 过几种不同的解决方案;HTTPClient,net/http,Rest客户端,用户...

我需要一种方法来继续到最后一页,以便验证该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

如有任何建议,将不胜感激!

推荐答案

要遵循重定向,可以执行以下操作(taken from ruby-doc)

Following Redirection

require 'net/http'
require 'uri'

def fetch(uri_str, limit = 10)
  # You should choose better exception.
  raise ArgumentError, 'HTTP redirect too deep' if limit == 0

  url = URI.parse(uri_str)
  req = Net::HTTP::Get.new(url.path, { 'User-Agent' => 'Mozilla/5.0 (etc...)' })
  response = Net::HTTP.start(url.host, url.port, use_ssl: true) { |http| http.request(req) }
  case response
  when Net::HTTPSuccess     then response
  when Net::HTTPRedirection then fetch(response['location'], limit - 1)
  else
    response.error!
  end
end

print fetch('http://www.ruby-lang.org/')

Ruby相关问答推荐

Ruby错误-应为数组或字符串,已获取哈希

使用Mac命令行解密用Ruby加密的Zip

使用 Ruby,我如何访问和比较这些嵌套的数组值?

Ruby $:.unshift File.dirname(__FILE__)

在 MacOS Sierra 上使用 RMagick 2.16 的 ImageMagick 7 找不到 MagickWand.h

我如何 expect期望在 RSpec 中引发异常的东西?

在包含任意数量的嵌套散列和数组的散列中查找键/值对

Ruby代码美化,多行拆分长指令

将haml标签放入link_to helper

如何在运行时判断 Ruby 中的 Gem 版本?

无法正确自动生成 Ruby DevKit 配置文件

在 Ruby 中定义 [方括号] 方法是如何工作的?

用元素填充数组 N 次

在现有 Jekyll 安装中切换主题

将 CSV 文件转换为哈希数组

判断散列的键是否包含所有键集

Xcode - 配置:错误:在 $PATH 中找不到可接受的 C 编译器

如何传递函数而不是块

Ruby 是否有像栈、队列、链表、映射或集合这样的容器?

=== 与 == 在 Ruby 中