diff options
-rw-r--r-- | lib/webrick/httpproxy.rb | 74 |
1 files changed, 43 insertions, 31 deletions
@@ -211,21 +211,15 @@ module WEBrick end def do_GET(req, res) - perform_proxy_request(req, res) do |http, path, header| - http.get(path, header) - end end def do_HEAD(req, res) - perform_proxy_request(req, res) do |http, path, header| - http.head(path, header) - end end def do_POST(req, res) - perform_proxy_request(req, res) do |http, path, header| - http.post(path, req.body || "", header) - end end def do_OPTIONS(req, res) @@ -301,38 +295,56 @@ module WEBrick return FakeProxyURI end - def perform_proxy_request(req, res) uri = req.request_uri path = uri.path.dup path << "?" << uri.query if uri.query header = setup_proxy_header(req, res) upstream = setup_upstream_proxy_authentication(req, res, header) - response = nil http = Net::HTTP.new(uri.host, uri.port, upstream.host, upstream.port) - http.start do - if @config[:ProxyTimeout] - ################################## these issues are - http.open_timeout = 30 # secs # necessary (maybe because - http.read_timeout = 60 # secs # Ruby's bug, but why?) - ################################## end - response = yield(http, path, header) end - - # Persistent connection requirements are mysterious for me. - # So I will close the connection in every response. - res['proxy-connection'] = "close" - res['connection'] = "close" - - # Convert Net::HTTP::HTTPResponse to WEBrick::HTTPResponse - res.status = response.code.to_i - choose_header(response, res) - set_cookie(response, res) - set_via(res) - res.body = response.body end - # :stopdoc: end end |