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.