El título es bastante autoexplicativo. ¿Hay alguna forma de obtener los encabezados (excepto Rack::Request.env[]
)?Rack :: Solicitud: ¿cómo obtengo todos los encabezados?
Respuesta
Las cabeceras HTTP están disponibles en el Rack environment pasado a su aplicación:
HTTP_
Variables: Las variables correspondientes a las cabeceras de petición HTTP proporcionados por el cliente (es decir, variables cuyos nombres comienzan con HTTP_). La presencia o ausencia de estas variables debe corresponder con la presencia o ausencia del encabezado HTTP apropiado en la solicitud.
Así las cabeceras HTTP tienen el prefijo "HTTP_" y ha añadido que el hash.
aquí hay un pequeño programa que extrae y los muestra:
require 'rack'
app = Proc.new do |env|
headers = env.select {|k,v| k.start_with? 'HTTP_'}
.collect {|key, val| [key.sub(/^HTTP_/, ''), val]}
.collect {|key, val| "#{key}: #{val}<br>"}
.sort
[200, {'Content-Type' => 'text/html'}, headers]
end
Rack::Server.start :app => app, :Port => 8080
Cuando ejecuto esto, además de las cabeceras HTTP como se muestra por Chrome o Firefox, no es una "versión: HTPP/1.1" (es decir, se está agregando una entrada con la clave "HTTP_VERSION" y el valor "HTTP/1.1" al hash de env).
Sobre la base de la respuesta de @ mate, pero esto realmente le da las cabeceras de petición en un hash como se pide en la pregunta:
headers = Hash[*env.select {|k,v| k.start_with? 'HTTP_'}
.collect {|k,v| [k.sub(/^HTTP_/, ''), v]}
.collect {|k,v| [k.split('_').collect(&:capitalize).join('-'), v]}
.sort
.flatten]
Dependiendo de qué convención clave prefiere puede que quiera usar otra cosa en lugar de :capitalizar.
- 1. springframework obtener todos los encabezados de solicitud
- 2. XmlHttpRequest getAllResponseHeaders() no devuelve todos los encabezados
- 3. Cómo probar los encabezados con rspec y prueba en rack en Sinatra
- 4. Cómo iterar sobre todos los encabezados de solicitud en webapp RequestHandler using python?
- 5. ¿Cómo obtengo los encabezados de un error de servidor 401?
- 6. Cómo obtengo que urllib2 registre TODOS los bytes transferidos
- 7. ¿Es posible registrar todos los encabezados de solicitud HTTP con Apache?
- 8. ¿Hay alguna manera de obtener todos los encabezados de solicitud en una llamada jQuery $ .ajax?
- 9. WCF REST lista los encabezados HTTP en la solicitud entrante
- 10. ¿Cómo puedo ver los encabezados de solicitud realizados por curl al enviar una solicitud al servidor?
- 11. ¿Cómo se obtienen los encabezados predeterminados en una solicitud de urllib2?
- 12. ¿Cómo configuro/obtengo los valores de sesión en una aplicación Rack?
- 13. JS/jQuery obtener encabezados de solicitud HTTPRequest?
- 14. Cómo resolver los errores de Rack Lint?
- 15. ¿Cómo obtengo todos los artículos sobre personas de Wikipedia?
- 16. Java: ¿cómo obtengo todos los valores seleccionados de una JList?
- 17. ¿Cómo obtengo una lista de todos los ensamblajes cargados actualmente?
- 18. ¿Cómo obtengo todos los parámetros GET en Silex?
- 19. accediendo a los encabezados de solicitud en django/python
- 20. ¿Los encabezados de solicitud REST están encriptados por SSL?
- 21. Depurador Safari 6: vea los encabezados de solicitud/respuesta grabados
- 22. ¿Cómo obtengo la URL de una solicitud?
- 23. ¿Cómo puedo mostrar todos los encabezados HTTP cuando uso el DefaultHTTPClient?
- 24. window.open con los encabezados
- 25. Obtener encabezados de solicitud para Urllib2.Request?
- 26. Agregar encabezados a una solicitud en rieles
- 27. C# - ¿Cómo obtengo el usuario "Todos"?
- 28. Obtener todos los encabezados de clientes en FastCGI (C/C++)
- 29. Cómo ver los encabezados enviados por HttpWebRequest
- 30. ¿Cómo probar los encabezados esperados?
Ah, entonces básicamente es 'env' :). Lo que no me gusta son los nombres con algunos caracteres reemplazados. Bueno, supongo que tendré que salirme con la tuya ... – PJK
@PJK, así que los nombres deberían ser insensibles de todos modos: http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4. 2. ¿Qué personajes están siendo reemplazados? ¿Estás tratando de usar caracteres desde fuera del conjunto de caracteres ASCII? Los nombres de encabezado deben ser solo ASCII. – matt
Lo sé, es solo una cuestión de conveniencia ... Por ejemplo, X-Build se convierte en HTTP_X_BUILD, lo que significa que X_Build y X-BUILD deberían ser equivalentes, pero (me han dicho que) los navegadores diferencian estas dos alternativas. – PJK