如何从Sinatra中转储HTTP请求?

有没有办法以应用程序接收数据的确切方式将所有传入请求转储到Sinatra应用程序? 也许是某种Rack中间件?

当我想调试’事物’时,我用-D-V标志运行:

 $ thin start -p 3000 -R config.ru -D -V -D, --debug Set debbuging on -V, --trace Set tracing on (log raw request/response) 

如果您尝试从请求获取原始输出,请使用请求方法,如:

  # app running on http://example.com/example get '/foo' do request.body # request body sent by the client (see below) request.scheme # "http" request.script_name # "/example" request.path_info # "/foo" request.port # 80 request.request_method # "GET" request.query_string # "" request.content_length # length of request.body request.media_type # media type of request.body request.host # "example.com" request.get? # true (similar methods for other verbs) request.form_data? # false request["SOME_HEADER"] # value of SOME_HEADER header request.referer # the referer of the client or '/' request.user_agent # user agent (used by :agent condition) request.cookies # hash of browser cookies request.xhr? # is this an ajax request? request.url # "http://example.com/example/foo" request.path # "/example/foo" request.ip # client IP address request.secure? # false request.env # raw env hash handed in by Rack end 

有关详细信息,请参阅“ 入门 ”。

也许这不是你要问的,但我到了这里寻找一种方法来查看Sinatra中的所有HTTP请求头(实际上不必枚举它们,来调试代理请求)。 我发现这非常有用:

 get "/my_route" do puts "#{ request.env }" end 

或者,以可读的json格式返回响应中的blob:

 require 'json' get "/my_route" do content_type :text return JSON.pretty_generate(request.env) end 

瞧,所有请求细节:

 { "SERVER_SOFTWARE": "thin 1.6.2 codename Doc Brown", "SERVER_NAME": "10.0.1.3", "rack.input": "#", "rack.version": [ 1, 0 ], "rack.errors": "#", "rack.multithread": false, "rack.multiprocess": false, "rack.run_once": false, "REQUEST_METHOD": "GET", "REQUEST_PATH": "/my_route", "PATH_INFO": "/my_route", "REQUEST_URI": "/my_route", "HTTP_VERSION": "HTTP/1.0", "HTTP_X_FORWARDED_FOR": "10.0.1.3, 127.0.0.1, 127.0.0.1, 127.0.0.1", "HTTP_HOST": "10.0.1.3:9393", "HTTP_CONNECTION": "close", "HTTP_X_REAL_IP": "10.0.1.3", "HTTP_X_FE_SCHEME": "http", "HTTP_X_FE_HOST": "10.0.10.145", "HTTP_X_FE_ROUTE": "/my_route", "HTTP_ACCEPT": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", "HTTP_USER_AGENT": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36", "HTTP_ACCEPT_LANGUAGE": "en-US,en;q=0.8", "HTTP_X_VARNISH": "917254702", "HTTP_ACCEPT_ENCODING": "gzip", "GATEWAY_INTERFACE": "CGI/1.2", "SERVER_PORT": "9393", "QUERY_STRING": "", "SERVER_PROTOCOL": "HTTP/1.1", "rack.url_scheme": "http", "SCRIPT_NAME": "", "REMOTE_ADDR": "10.0.10.145", "async.callback": "#", "async.close": "#", "rack.logger": "#", "rack.request.query_string": "", "rack.request.query_hash": { }, "sinatra.route": "GET (?-mix:^\\/my_route$)" }