自动将代理添加到ruby中的所有HTTP连接

时间:2011-07-29 04:04:27

标签: ruby http proxy

我有一个启动多个HTTP连接的应用程序,我想为所有连接添加代理。

应用程序正在使用net/HTTPTCP套接字和open-uri,所以理想情况下,我希望能够修补从这些库启动的所有连接,而不是手动将其添加到每个库中在启动连接的代码中的位置。

有没有办法实现(在Ruby 1.9.2上)?

2 个答案:

答案 0 :(得分:7)

Open URI使用HTTP_PROXY环境变量

这是一篇关于如何在windows和unix变体上使用它的文章。

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

你也可以使用ENV哈希

直接在ruby中设置它
ENV['HTTP_PROXY'] = 'http://username:password@hostname:port'

net / http文档说不依赖于环境并且每次都设置它

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
        :
}

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

答案 1 :(得分:2)

是的,机械化也是如此(这是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)