2011-07-29 15 views
11

Tengo una aplicación que inicia múltiples conexiones HTTP y me gustaría agregar un proxy a todas las conexiones.Agregar proxy automáticamente a todas las conexiones HTTP en ruby ​​

La aplicación utiliza net/HTTP, TCP tomas de corriente y open-uri por lo que idealmente me gustaría ser capaz de parchear todas las conexiones iniciadas a partir de las bibliotecas en lugar de añadir manualmente a todos y cada ubicación en el código que inicia una conexión.

¿Hay alguna manera de lograr eso (en Ruby 1.9.2)?

Respuesta

6

abierto URI utiliza la variable de entorno http_proxy

He aquí un artículo sobre cómo usarlo en ambas ventanas y variantes de UNIX.

http://kaamka.blogspot.com/2009/06/httpproxy-environment-variable.html

también puede establecer directamente en Ruby utilizando el hash ENV

ENV['HTTP_PROXY'] = 'http://username:[email protected]:port' 

la documentación net/http no dice que confiar en el medio ambiente y la puso cada vez

require 'net/http' 
require 'uri' 

proxy_host = 'your.proxy.host' 
proxy_port = 8080 
uri = URI.parse(ENV['http_proxy']) 
proxy_user, proxy_pass = uri.userinfo.split(/:/) if uri.userinfo 
Net::HTTP::Proxy(proxy_host, proxy_port, 
       proxy_user, proxy_pass).start('www.example.com') {|http| 
    # always connect to your.proxy.addr:8080 using specified username and password 
     : 
} 

de http://ruby-doc.org/stdlib/libdoc/net/http/rdoc/classes/Net/HTTP.html

+1

'ENV [ 'HTTP_PROXY']' - esto no parece funcionar por sí mismo – cwd

+1

Creo 'Net :: HTTP' sólo lee: ENV proxy en v.2 + – akostadinov

2

Sí y m echanize también lo hace (esto es para el verison 1.0.0)

require 'mechanize' 
url = 'http://www.example.com' 

agent = Mechanize.new 
agent.user_agent_alias = 'Mac Safari' 
agent.set_proxy('127.0.0.1', '3128') 
@page = agent.get(:url => url) 
Cuestiones relacionadas