use_ssl = url.scheme == 'https'
+ filename = url.path.split("/")[-1]
path = url.path
if !ENV["QUERY_STRING"].empty?
path += "?" + ENV["QUERY_STRING"]
end
- return url.host, url.port, use_ssl, path
+ return url.host, url.port, use_ssl, filename, path
end
-def createRequest(method, path)
+def createRequest(method, path, ffHeader)
if method == "GET"
req = Net::HTTP::Get.new(path)
elsif method == "POST"
else
raise RuntimeError, "No support for method: #{method}"
end
- return req
-end
-def insertHeaders(req, ffHeader)
if ffHeader
req["X-Forwarded-For"] = ENV["REMOTE_ADDR"]
end
req["Accept-Charset"] = ENV["HTTP_ACCEPT_CHARSET"]
req["Accept-Encoding"] = ENV["HTTP_ACCEPT_ENCODING"]
req["Accept-Language"] = ENV["HTTP_ACCEPT_LANGUAGE"]
+
+ return req
end
-def doRequest(req, host, port, use_ssl)
+def doProxy(req, host, port, use_ssl, filename, outputDir)
# Make the request
http = Net::HTTP.new(host, port)
http.use_ssl = use_ssl
- res = http.request(req)
+ res = http.request req do |res|
- # Tweak the headers a little
- res.delete("transfer-encoding")
- res.delete("transfer-length")
- res["connection"] = "close"
+ # Tweak the headers a little
+ res.delete("transfer-encoding")
+ res.delete("transfer-length")
+ res["connection"] = "close"
- return res
-end
+ 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"
-def printResult(res)
- 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"
+ out = File.open("#{outputDir}/#{filename}", 'w')
+ res.read_body do |chunk|
+ print chunk
+ out.write chunk
end
end
- print "\r\n"
- print res.body
end
def debug(msg)
}
end
-def proxyTo(basePath, ffHeader=True)
- host, port, use_ssl, path = getParams(basePath)
- req = createRequest(ENV["REQUEST_METHOD"], path)
- insertHeaders(req, ffHeader)
- res = doRequest(req, host, port, use_ssl)
- printResult(res)
+def proxyTo(basePath, ffHeader=True, outputDir=None)
+ host, port, use_ssl, filename, path = getParams(basePath)
+ req = createRequest(ENV["REQUEST_METHOD"], path, ffHeader)
+ doProxy(req, host, port, use_ssl, filename, outputDir)
end