How to dump an HTTP request from within Sinatra?

t6d picture t6d · Oct 25, 2010 · Viewed 27k times · Source

Is there a way to dump all incoming requests to a Sinatra application in the exact way the application receives the data? Maybe some sort of Rack middleware?

Answer

include picture include · Oct 26, 2010

I run thin with the -D and -V flags when I want to debug 'things':

$ thin start -p 3000 -R config.ru -D -V

-D, --debug                      Set debbuging on
-V, --trace                      Set tracing on (log raw request/response)

If you are trying to get the raw output from a request, use the request method like:

  # 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

See "GETTING STARTED" for more information.