X-Git-Url: https://code.delx.au/cgiproxy/blobdiff_plain/a5186af9c8968fe91479770e9cb06d312952958c..80e465ea4142082c2402e597d7630cca6cb96da6:/ruby/proxy.rb diff --git a/ruby/proxy.rb b/ruby/proxy.rb old mode 100755 new mode 100644 index 4eb744b..27e5538 --- a/ruby/proxy.rb +++ b/ruby/proxy.rb @@ -1,6 +1,7 @@ #!/usr/bin/env ruby require 'net/http' +require 'net/https' require 'uri' class NilClass @@ -16,16 +17,19 @@ def getParams(url) end url = URI.parse(url); - if url.scheme != "http" + if !["http", "https"].include? url.scheme raise RuntimeError, "Unsupported scheme: #{url.scheme}" end + use_ssl = url.scheme == 'https' + + filename = url.path path = url.path if !ENV["QUERY_STRING"].empty? path += "?" + ENV["QUERY_STRING"] end - return url.host, url.port, path + return url.host, url.port, use_ssl, filename, path end def createRequest(method, path) @@ -40,8 +44,10 @@ def createRequest(method, path) 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"] @@ -56,11 +62,11 @@ def insertHeaders(req) req["Accept-Language"] = ENV["HTTP_ACCEPT_LANGUAGE"] end -def doRequest(req, host, port) +def doRequest(req, host, port, use_ssl) # Make the request - res = Net::HTTP.start(host, port) do |http| - http.request(req) - end + http = Net::HTTP.new(host, port) + http.use_ssl = use_ssl + res = http.request(req) # Tweak the headers a little res.delete("transfer-encoding") @@ -71,24 +77,35 @@ 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 end +def writeFile(res, filename, outputDir) + filename = filename.split("/")[-1] + File.open("#{outputDir}/#{filename}", 'w') {|f| f.write(res.body) } +end + def debug(msg) File.open("/tmp/debuglog.txt", "a") { |f| f << Time.new.to_s + " " + msg + "\n" } end -def proxyTo(basePath) - host, port, path = getParams(basePath) +def proxyTo(basePath, ffHeader=True, outputDir=None) + host, port, use_ssl, filename, path = getParams(basePath) req = createRequest(ENV["REQUEST_METHOD"], path) - insertHeaders(req) - res = doRequest(req, host, port) + insertHeaders(req, ffHeader) + res = doRequest(req, host, port, use_ssl) + writeFile(res, filename, outputDir) printResult(res) end