2012-04-06 2 views
6

Я использую рубин 1.9.3 и пытается использовать open-uri, чтобы получить URL и попробуйте отправить с помощью Net:HTTPрубин Proxy Authentication GET/POST с OpenURI или чистой/HTTP

Im пытается использовать проверку подлинности прокси для обоих:

Попытка сделать 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

Я пробовал (для открытых 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? Кто-нибудь прошел через это зверство?

ответ

14

Try:

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. Если вы посмотрите на мой последний запрос на вытягивание, вы увидите основную реализацию.

EDIT: Надеюсь, это поможет вам двигаться в правильном направлении.

Net::HTTP::Proxy(proxy_uri.host, proxy_uri.port,"username","password").start('whatismyipaddress.com') do |http| 
    puts http.get('/').body 
end 
Смежные вопросы