Update changelog for 0.6.1-1.1 release
Prevent testcases that access the internet to run
tag patch
A request/response rewriting HTTP proxy. A Rack app. Subclass Rack::Proxy
and provide your rewrite_env
and rewrite_response
methods.
class Foo < Rack::Proxy
def rewrite_env(env)
env["HTTP_HOST"] = "example.com"
env
end
def rewrite_response(triplet)
status, headers, body = triplet
headers["X-Foo"] = "Bar"
triplet
end
end
class TrustingProxy < Rack::Proxy
def rewrite_env(env)
env["rack.ssl_verify_none"] = true
env
end
end
The same can be achieved for all requests going through the Rack::Proxy
instance by using
Rack::Proxy.new(ssl_verify_none: true)
Example: Proxying only requests that end with ".php" could be done like this:
require 'rack/proxy'
class RackPhpProxy < Rack::Proxy
def perform_request(env)
request = Rack::Request.new(env)
if request.path =~ %r{\.php}
env["HTTP_HOST"] = "localhost"
env["REQUEST_PATH"] = "/php/#{request.fullpath}"
super(env)
else
@app.call(env)
end
end
end
To use the middleware, please consider the following:
config.middleware.use RackPhpProxy, {ssl_verify_none: true}
class MyAwesomeSinatra < Sinatra::Base
use RackPhpProxy, {ssl_verify_none: true}
end
This will allow to run the other requests through the application and only proxy the requests that match the condition from the middleware.
See tests for more examples.
Doesn't work with fakeweb/webmock. Both libraries monkey-patch net/http code.