Автоматическое добавление прокси ко всем HTTP-соединениям в ruby - PullRequest
11 голосов
/ 29 июля 2011

У меня есть приложение, которое инициирует несколько HTTP подключений, и я хотел бы добавить прокси для всех подключений.

Приложение использует net/HTTP, TCP сокеты и open-uri, поэтому в идеале я хотел бы иметь возможность исправлять все соединения, инициированные из этих библиотек, вместо того, чтобы добавлять их вручную в каждое место кода, который инициирует соединение.

Есть ли способ сделать это (на Ruby 1.9.2)?

Ответы [ 2 ]

7 голосов
/ 29 июля 2011

Открытый URI использует переменную среды HTTP_PROXY

Вот статья о том, как использовать его в обоих вариантах windows и unix.

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

вы также можете установить его непосредственно в ruby, используя хэш ENV

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

2 голосов
/ 29 июля 2011

Да, и механизация тоже (это для версии 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...