diff options
author | Tom Gilbert <tom@linuxbrit.co.uk> | 2005-07-20 00:17:51 +0000 |
---|---|---|
committer | Tom Gilbert <tom@linuxbrit.co.uk> | 2005-07-20 00:17:51 +0000 |
commit | 66d49005d6b359dabc8a48fccab9c860ef31f29b (patch) | |
tree | 2e30af35db41d368b999c26c965a0b475259242d /rbot/httputil.rb | |
parent | c48b4d6fb9312b66ca937028dcba97fc04c99b9b (diff) |
Add new httputil object to the bot object, to be used by plugins etc that
wish to make http requests. It sets up all the proxies etc for them
according to bot config.
Diffstat (limited to 'rbot/httputil.rb')
-rw-r--r-- | rbot/httputil.rb | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/rbot/httputil.rb b/rbot/httputil.rb new file mode 100644 index 00000000..000dcf98 --- /dev/null +++ b/rbot/httputil.rb @@ -0,0 +1,83 @@ +module Irc + +require 'net/http' +Net::HTTP.version_1_2 + +# class for making http requests easier (mainly for plugins to use) +# this class can check the bot proxy configuration to determine if a proxy +# needs to be used, which includes support for per-url proxy configuration. +class HttpUtil + def initialize(bot) + @bot = bot + end + + # uri:: Uri to create a proxy for + # + # return a net/http Proxy object, which is configured correctly for + # proxying based on the bot's proxy configuration. + # This will include per-url proxy configuration based on the bot config + # +http_proxy_include/exclude+ options. + def get_proxy(uri) + proxy = nil + if (ENV['http_proxy']) + proxy = URI.parse ENV['http_proxy'] + end + if (@bot.config["http_proxy"]) + proxy = URI.parse ENV['http_proxy'] + end + + # if http_proxy_include or http_proxy_exclude are set, then examine the + # uri to see if this is a proxied uri + if uri + if @bot.config["http_proxy_exclude"] + # TODO + end + if @bot.config["http_proxy_include"] + end + end + + proxy_host = nil + proxy_port = nil + proxy_user = nil + proxy_pass = nil + if @bot.config["http_proxy_user"] + proxy_user = @bot.config["http_proxy_user"] + if @bot.config["http_proxy_pass"] + proxy_pass = @bot.config["http_proxy_pass"] + end + end + if proxy + proxy_host = proxy.host + proxy_port = proxy.port + end + + return Net::HTTP.new(uri.host, uri.port, proxy_host, proxy_port, proxy_user, proxy_port) + end + + # uri:: uri to query (Uri object) + # readtimeout:: timeout for reading the response + # opentimeout:: timeout for opening the connection + # + # simple get request, returns response body if the status code is 200 and + # the request doesn't timeout. + def get(uri, readtimeout=10, opentimeout=5) + proxy = get_proxy(uri) + proxy.open_timeout = opentimeout + proxy.read_timeout = readtimeout + + begin + proxy.start() {|http| + resp = http.get(uri) + if resp.code == "200" + return resp.body + end + return nil + } + rescue StandardError, Timeout::Error => e + $stderr.puts "HttpUtil.get exception: #{e}, while trying to get #{uri}" + end + return nil + end +end + +end |