我正在尝试从我的计算机运行ruby脚本,我希望脚本使用我设置的代理IP地址/服务器,而不是与本地计算机关联的默认IP地址。
我已经能够通过在网络设置中进行更改来使我的Web浏览器使用此代理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"
感谢您的帮助!
答案 0 :(得分:4)
使用:proxy
选项让open-uri知道您的代理服务器:
page = open(url, :proxy => "http://#{proxy_host}:#{proxy_port}/").read
您也可以设置环境变量http_proxy
。如果您这样做,请提供:proxy => true
选项。
page = open(url, :proxy => true).read
[ADDED]
如果您希望将代理与基本身份验证结合使用,则可以按以下方式提供:proxy_http_basic_authentication
选项而不是:proxy
:
:proxy_http_basic_authentication => ["http://#{proxy_host}:#{proxy_port}/", login, password]
请注意,:proxy_http_basic_authentication
可用于ruby 1.9.2或更高版本。
答案 1 :(得分:0)
我建议使用mechanize和css而不是regex:
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"