2012-04-06 11 views
6

J'utilise Ruby 1.9.3 et essayer d'utiliser open-uri pour obtenir une URL et essayer de poster en utilisant Net:HTTPRuby Authentification proxy GET/POST avec openURI ou net/http

Im essayant d'utiliser l'authentification proxy pour les deux:

Essayer de faire une demande POST avec 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 

Et pour open-uri que je ne peux pas faire POST j'utiliser:

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

Comment pourrais-je les modifier pour utiliser un proxy avec authentification HTTP

J'ai essayé (pour open-uri)

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

Cependant tout ce que je vais faire est un OpenURI::HTTPError: 407 Proxy Authentication Required. J'ai tout vérifié et cela fonctionne dans le navigateur avec les mêmes détails d'authentification et de proxy mais je ne peux pas obtenir ruby ​​pour le faire.

Comment modifier le code ci-dessus pour ajouter correctement l'authentification http? Quelqu'un at-il traversé cette atrocité?

Répondre

14

Essayez:

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 

En ce qui concerne Net :: HTTP, j'ai récemment mis en œuvre pour le soutien proxy avec authentification HTTP dans une bibliothèque wrapper Net :: HTTP appelé http. Si vous regardez ma dernière requête, vous verrez l'implémentation de base.

EDIT: Espérons que cela vous aidera à avancer dans la bonne direction.

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