23

我的任务是通过自动化测试 URL 上的不同用户代理。我正在使用ruby进行编码,并且我一直在尝试使用以下方法设置用户代理,但它似乎无法识别用户代理。

@http = Net::HTTP.new(URL)
response = @http.request_get(URL, {'User-Agent' => useragent})  

有没有其他方法可以做到这一点,或者我做错了什么?

4

4 回答 4

30
http = Net::HTTP.new("your.site.com", 80)
req = Net::HTTP::Get.new("/path/to/the/page.html", {'User-Agent' => 'your_agent'})
response = http.request(req)
puts response.body

对我很有用。

于 2011-04-27T00:57:05.170 回答
24

还有另一个对我有用的:

require 'open-uri'
html = open('http://your.site.com/the/page.html', 'User-Agent' => 'Ruby').read
puts html

希望这会帮助你。

于 2011-04-27T01:14:09.620 回答
3

包含的Net::HTTPHeader具有 initialize_http_header方法:

@http = Net::HTTP.new(URL)
@http.initialize_http_header({'User-Agent' => useragent})
response = @http.request_get(URL)  

高温高压

于 2012-03-06T08:38:20.763 回答
1

我无法找到适用于两者https并提供标题的解决方案。这是一个有效的版本:

require "net/http"

uri = URI("https://pokemongolive.com/events/community-day/")

request = Net::HTTP::Get.new(uri)
request["User-Agent"] = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"

response = Net::HTTP.start(uri.hostname, uri.port, :use_ssl => (uri.scheme == 'https')) {|http|
  http.request(request)
}

puts response.code
puts response.body

使用的 Ruby 版本是:ruby 2.6.3p62 (2019-04-16 revision 67580)

于 2020-12-19T17:43:35.360 回答