2012-04-06 10 views
6

Używam Ruby 1.9.3 i próbuje użyć open-uri aby uzyskać adres URL i spróbować delegowania użyciu Net:HTTPRuby Proxy Authentication GET/POST z OpenURI lub netto/http

im próbuje użyć uwierzytelniania serwera proxy dla obu:

Próbując zrobić POST prośbę wraz 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 

I open-uri których nie mogę dostać się do POST używać:

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

Jak zmodyfikować je do korzystania z serwera proxy z uwierzytelnianiem HTTP

Próbowałem (na otwartym uri)

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

Jednak wszystko dostanę to OpenURI::HTTPError: 407 Proxy Authentication Required. Sprawdziłem wszystko i działa w przeglądarce z tymi samymi danymi uwierzytelniającymi i proxy, ale nie mogę tego zrobić za pomocą ruby.

Jak zmodyfikować powyższy kod, aby poprawnie dodać uwierzytelnianie http? Czy ktoś przeszedł przez to okrucieństwo?

Odpowiedz

14

Spróbuj:

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 

chodzi o Net :: HTTP, niedawno wprowadzone wsparcie dla proxy z uwierzytelniania http w Net :: HTTP otoki biblioteka nazywa http. Jeśli spojrzysz na moją ostatnią prośbę o pociągnięcie, zobaczysz podstawową implementację.

EDYTOWANIE: Mam nadzieję, że to pozwoli ci poruszać się we właściwym kierunku.

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