framework ruby sinatra rack

sinatra ruby framework



¿Cómo volcar una solicitud HTTP desde Sinatra? (2)

Tal vez esto no sea lo que está preguntando, pero llegué aquí buscando una manera de ver todos los encabezados de solicitud HTTP en Sinatra (sin tener que enumerarlos realmente, para depurar una solicitud de proxy). Encontré esto muy útil:

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

O, para devolver ese blob en la respuesta en un formato json legible:

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

Y listo, todos los detalles de la solicitud:

{ "SERVER_SOFTWARE": "thin 1.6.2 codename Doc Brown", "SERVER_NAME": "10.0.1.3", "rack.input": "#<StringIO:0x00000002bf82c0>", "rack.version": [ 1, 0 ], "rack.errors": "#<IO:0x00000002549b90>", "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": "#<Method: Thin::Connection#post_process>", "async.close": "#<EventMachine::DefaultDeferrable:0x00000002a60070>", "rack.logger": "#<Rack::NullLogger:0x00000004154ad8>", "rack.request.query_string": "", "rack.request.query_hash": { }, "sinatra.route": "GET (?-mix:^///my_route$)" }

¿Hay una manera de volcar todas las solicitudes entrantes a una aplicación Sinatra de la manera exacta en que la aplicación recibe los datos? ¿Tal vez algún tipo de middleware Rack?


Corro con las -D y -V cuando quiero depurar ''cosas'':

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

Si está intentando obtener el resultado bruto de una solicitud, use el método de solicitud como:

# 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

Consulte " CÓMO COMENZAR " para obtener más información.