使用OpenURI或net / http进行Ruby代理身份验证GET / POST

时间:2012-04-06 11:48:09

标签: ruby-on-rails ruby proxy open-uri net-http

我正在使用ruby 1.9.3并尝试使用open-uri获取网址并尝试使用Net:HTTP发布

我试图对两者使用代理身份验证:

尝试使用POST执行net/http请求:

require 'net/http'
require 'open-uri'
http = Net::HTTP.new("google.com", 80)
headers = { 'User-Agent' => 'Ruby 193'}

resp, data = http.post("/", "name1=value1&name2=value2", headers)
puts data

对于我无法做到的open-uri POST我使用:

data = open("http://google.com/","User-Agent"=> "Ruby 193").read

如何修改这些以使用具有HTTP身份验证的代理

我已经尝试过(对于open-uri)

data = open("http://google.com/","User-Agent"=> "Ruby 193", :proxy_http_basic_authentication => ["http://proxy.com:8000/", "proxy-user", "proxy-password"]).read

但我得到的只是OpenURI::HTTPError: 407 Proxy Authentication Required。我已经验证了所有内容,它在浏览器中使用相同的身份验证和代理详细信息,但我无法做到这一点。

如何修改上面的代码以正确添加http身份验证?有没有人经历过这场暴行?

1 个答案:

答案 0 :(得分:14)

尝试:

require "open-uri"
proxy_uri = URI.parse("http://proxy.com:8000")

data = open("http://www.whatismyipaddress.com/", :proxy_http_basic_authentication => [proxy_uri, "username", "password"]).read
puts data

对于Net :: HTTP,我最近在名为http的Net :: HTTP包装器库中实现了对具有http身份验证的代理的支持。如果你查看我的最后一次拉动请求,你会看到基本的实现。

编辑:希望这会让您朝着正确的方向前进。

Net::HTTP::Proxy(proxy_uri.host, proxy_uri.port,"username","password").start('whatismyipaddress.com') do |http| 
  puts http.get('/').body
end