ruby-on-rails - 如何通过 Ruby 中的代理获取带有用户代理和超时的 URL?

标签 ruby-on-rails ruby url proxy get

如果我需要通过某个代理获取 URL,我该如何获取 URL,它的超时必须为最大 n。秒,还有一个用户代理

   require 'nokogiri'
   require 'net/http'
   require 'rexml/document'

   def get_with_max_wait(param, proxy, timeout)
     url = "http://example.com/?p=#{param}"
     uri = URI.parse(url)
     proxy_uri = URI.parse(proxy)
     http = Net::HTTP.new(uri.host, 80, proxy_uri.host, proxy_uri.port)
     http.open_timeout = timeout
     http.read_timeout = timeout
     response = http.get(url)
     doc = Nokogiri.parse(response.body)
     doc.css(".css .goes .here")[0].content.strip
   end

上面的代码通过超时代理获取 URL,但缺少用户代理。如何通过用户代理获取它?

最佳答案

您应该使用 open-uri 并将用户代理设置为 open 函数中的参数。

下面是一个示例,我在变量中设置用户代理并将其用作 open 函数中的参数。

    require 'rubygems'
    require 'nokogiri'
    require 'open-uri'

    user_agent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.854.0 Safari/535.2"

    url = "http://www.somedomain.com/somepage/"

    @doc = Nokogiri::HTML(open(url, 'proxy' => 'http://(ip_address):(port)', 'User-Agent' => user_agent, 'read_timeout' => 10 ), nil, "UTF-8")

有一个选项可以在 openURI 中设置读取超时

您可以在下面的链接中查看 Open URI 的文档

Open URI documentation

关于ruby-on-rails - 如何通过 Ruby 中的代理获取带有用户代理和超时的 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24383940/

相关文章:

javascript - 将用户重定向到编码的 URL 变量

ruby-on-rails - yaml 格式是否有命名约定?

ruby-on-rails - Rails 应用程序 View 中的 NoMethodError

Ruby 对象名称到字符串

ruby - 如何使用 sinatra/sequel 设置 application_name

mysql - Ruby on Rails 表单助手

ruby-on-rails - 如何覆盖 rails 模型中的 class_method 问题

javascript - 如何将 Rails-Jquery 添加回 Rails 应用程序?

api - 具有复合 ID 的 REST 资源的 URL

html - 如何从 C++ 打开 URL?