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"
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"]
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
}
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