Как сбросить HTTP-запрос из Sinatra?

Есть ли способ сбрасывать все входящие запросы к приложению Sinatra точно так же, как приложение получает данные? Может быть, какое-то промежуточное ПО Rack?


person t6d    schedule 25.10.2010    source источник


Ответы (2)


Я иссякаю с флагами -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

Дополнительную информацию см. в разделе "НАЧАЛО РАБОТЫ".

person include    schedule 25.10.2010
comment
В итоге я создал прокси, используя em-proxy, который сбрасывает каждый HTTP-запрос как есть в файл журнала. - person t6d; 03.11.2010
comment
круто, отлично звучит твой вариант. вы опубликуете свой код? Я тоже хочу этому научиться :D - person include; 09.11.2010
comment
где config.ru ? - person evandrix; 24.07.2016

Возможно, это не то, о чем вы спрашиваете, но я пришел сюда в поисках способа увидеть все заголовки HTTP-запросов в Sinatra (без фактического их перечисления для отладки прокси-запроса). Я нашел это весьма полезным:

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

Или, чтобы вернуть этот блоб в ответ в разборчивом формате json:

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": "#<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$)"
}
person Jeff Ward    schedule 04.09.2014