1

我正在尝试从我的计算机上运行一个 ruby​​ 脚本,并且我想让脚本使用我设置的代理 IP 地址/服务器,而不是与我的本地计算机关联的默认 IP 地址。

通过在网络设置中进行更改,我已经能够让我的网络浏览器使用这个代理 IP 地址。但是当我从 textmate 运行 ruby​​ 脚本时,它似乎没有使用我在网络设置中输入的代理 IP 地址。相反,它默认回到我本地机器的基本 IP 地址。

我可以在 textmate 或脚本本身中做些什么来指定它应该路由的代理 IP 地址吗?

我的脚本如下所示:

require "open-uri"
url = "some-url"
pattern = "<img"   


page = open(url).read
tags = page.scan(pattern)
puts "The site #{url} has #{tags.length} img tags"

谢谢你的帮助!

4

2 回答 2

4

使用:proxy选项让 open-uri 知道您的代理服务器:

page = open(url, :proxy => "http://#{proxy_host}:#{proxy_port}/").read

您也可以http_proxy改为设置环境变量。如果您这样做,请给予:proxy => true选择权。

page = open(url, :proxy => true).read

[添加]

如果你想使用带有基本身份验证的代理,你可以给出:proxy_http_basic_authentication选项而不是:proxy如下:

:proxy_http_basic_authentication => ["http://#{proxy_host}:#{proxy_port}/", login, password]

注意:proxy_http_basic_authentication可以在 ruby​​ 1.9.2 或更高版本中使用。

于 2012-12-10T02:15:38.477 回答
0

我建议使用 mechanize 和 css 而不是正则表达式:

require "mechanize"
url = "http://www.google.com/"

@agent = Mechanize.new{|a| a.set_proxy 'localhost', 8888}
page = @agent.get url
tags = page.search('img')
puts "The site #{url} has #{tags.length} img tags"
于 2012-12-10T01:59:53.557 回答