2012-04-06 27 views
6

Tôi đang sử dụng ruby ​​1.9.3 và cố gắng sử dụng open-uri để có được một url và thử đăng sử dụng Net:HTTPcủa Ruby Proxy Xác thực GET/POST với OpenURI hoặc net/http

Im cố gắng sử dụng xác thực proxy cho cả hai:

Đang cố gắng để làm một yêu cầu POST với 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 

Và đối với open-uri mà tôi không thể nhận được để làm POST tôi sử dụng:

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

Làm thế nào tôi có thể sửa đổi các sử dụng một proxy với HTTP Authentication

Tôi đã thử (cho mở uri)

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

Tuy nhiên tất cả tôi sẽ nhận được là một OpenURI::HTTPError: 407 Proxy Authentication Required. Tôi đã xác minh tất cả và nó hoạt động trong trình duyệt với cùng một chi tiết xác thực và proxy nhưng tôi không thể nhận được ruby ​​để làm điều đó.

Làm cách nào để sửa đổi mã ở trên để thêm xác thực http đúng cách? Có ai đã trải qua sự tàn bạo này không?

Trả lời

14

Hãy thử:

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 

Đối với Net :: HTTP, Gần đây tôi đã thực hiện hỗ trợ cho các proxy với xác thực http thành một Net :: HTTP wrapper thư viện gọi http. Nếu bạn nhìn vào yêu cầu kéo cuối cùng của tôi, bạn sẽ thấy việc triển khai cơ bản.

EDIT: Hy vọng điều này sẽ giúp bạn di chuyển đúng hướng.

Net::HTTP::Proxy(proxy_uri.host, proxy_uri.port,"username","password").start('whatismyipaddress.com') do |http| 
    puts http.get('/').body 
end 
Các vấn đề liên quan