Existe-t-il un moyen de vider toutes les demandes entrantes vers une application Sinatra de la manière exacte dont l'application reçoit les données? Peut-être une sorte de middleware Rack?Comment faire pour vider une requête HTTP à partir de Sinatra?
21
A
Répondre
47
Je cours mince avec les drapeaux -D
et -V
quand je veux debug « choses »:
$ thin start -p 3000 -R config.ru -D -V
-D, --debug Set debbuging on
-V, --trace Set tracing on (log raw request/response)
Si vous essayez d'obtenir la sortie brute d'une requête, utilisez la méthode de requête comme:
# 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
Voir «GETTING STARTED» pour plus d'informations.
17
Peut-être que ce n'est pas ce que vous demandez, mais je suis arrivé ici en cherchant un moyen de voir tous les en-têtes de requêtes HTTP dans Sinatra (sans avoir à les énumérer, pour déboguer une requête proxy). Je trouve cela très utile:
get "/my_route" do
puts "#{ request.env }"
end
Ou, pour revenir que blob dans la réponse dans un format JSON lisible:
require 'json'
get "/my_route" do
content_type :text
return JSON.pretty_generate(request.env)
end
Et voila, tous les détails de la demande:
{
"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$)"
}
Questions connexes
- 1. Comment faire pour exécuter une requête à partir de FQL?
- 2. Comment faire une requête Web à partir de Windows Azure
- 3. Sinatra HTTP Méthode 'PUT'
- 4. Faire une requête http dans J2ME
- 5. Comment faire pour vider l'écran par programmation?
- 6. Comment puis-je faire une requête http sans avoir à récupérer une réponse http en Python?
- 7. comment faire symfony tout vider à l'écran
- 8. Sinatra OPTIONS HTTP Verbe
- 9. Envoyer une requête HTTP à partir du fichier VC++
- 10. Comment faire une requête HTTP brute en Java?
- 11. Comment faire une requête HTTP POST en ASP?
- 12. Comment faire une requête get get HTTP avec les paramètres
- 13. Comment faire des formulaires html avec sinatra?
- 14. Comment faire une demande HTTP POST à une URL à partir d'une DLL C++?
- 15. Comment envoyer une requête HTTP POST à un serveur à partir d'Excel à l'aide de VBA?
- 16. Comment rechercher une requête HTTP?
- 17. Comment faire une requête SQL pour obtenir une plage spécifique de lignes à partir d'une table
- 18. Comment faire pour vider la base de données mysql?
- 19. Comment faire pour vider les en-têtes de demande ASP.NET à la chaîne
- 20. Comment faire http obtenir une requête de servlet pour obtenir l'image?
- 21. Comment faire une requête pour le compte?
- 22. Obtention d'un fichier à partir d'une requête http dans java
- 23. Comment faire pour vider le tableau JS ... (boommarklet?)
- 24. Faire un calendrier avec Sinatra
- 25. Comment faire pour vider les symboles dans un fichier .a
- 26. Comment faire pour vider les événements FileSystemWatcher en attente?
- 27. Comment vider une liste Python sans faire list = []?
- 28. Comment créer une réponse http pour une requête associée à une session PHP différente?
- 29. Django: Comment traquer une requête HTTP?
- 30. Objet de requête HTTP
I a fini par construire un proxy en utilisant 'em-proxy' qui déverse chaque requête HTTP telle quelle dans un fichier journal. – t6d
cool, sonne bien votre option. allez-vous poster votre code? Je veux apprendre cela aussi: D – include
où est le 'config.ru'? – evandrix