X-Git-Url: https://code.delx.au/cgiproxy/blobdiff_plain/0677bf739e158e9256a73fe911e04713b5aa2f40..aa63ee0d8fd66d6305ae6e4c62c491bb148c9b52:/ruby/proxy.rb diff --git a/ruby/proxy.rb b/ruby/proxy.rb index f03091d..11b14d2 100755 --- a/ruby/proxy.rb +++ b/ruby/proxy.rb @@ -10,25 +10,25 @@ class NilClass end -def createUrl(url) +def getParams(url) if !ENV["PATH_INFO"].empty? url += ENV["PATH_INFO"] end - if !ENV["QUERY_STRING"].empty? - url += "?" + ENV["QUERY_STRING"] - end + url = URI.parse(url); if url.scheme != "http" raise RuntimeError, "Unsupported scheme: #{url.scheme}" end - return url -end -def createRequest(method, url) path = url.path - if !url.query.empty? - path += "?" + url.query + if !ENV["QUERY_STRING"].empty? + path += "?" + ENV["QUERY_STRING"] end + + return url.host, url.port, path +end + +def createRequest(method, path) if method == "GET" req = Net::HTTP::Get.new(path) elsif method == "POST" @@ -40,8 +40,10 @@ def createRequest(method, url) return req end -def insertHeaders(req) - req["X-Forwarded-For"] = ENV["REMOTE_ADDR"] +def insertHeaders(req, ffHeader) + if ffHeader + req["X-Forwarded-For"] = ENV["REMOTE_ADDR"] + end req["Host"] = ENV["HTTP_HOST"] req["Cookie"] = ENV["HTTP_COOKIE"] req["Referer"] = ENV["HTTP_REFERER"] @@ -71,8 +73,13 @@ def doRequest(req, host, port) end def printResult(res) - res.each_capitalized do |key, value| - print "#{key}: #{value}\r\n" + if res.code != "200" + res["Status"] = "#{res.code} #{res.message}" + end + res.each_capitalized_name do |key| + res.get_fields(key).each do |value| + print "#{key}: #{value}\r\n" + end end print "\r\n" print res.body @@ -84,11 +91,11 @@ def debug(msg) } end -def proxyTo(basePath) - url = createUrl(basePath) - req = createRequest(ENV["REQUEST_METHOD"], url) - insertHeaders(req) - res = doRequest(req, url.host, url.port) +def proxyTo(basePath, ffHeader=True) + host, port, path = getParams(basePath) + req = createRequest(ENV["REQUEST_METHOD"], path) + insertHeaders(req, ffHeader) + res = doRequest(req, host, port) printResult(res) end