make - Obtener encabezados de respuesta de solicitud de Ruby HTTP
ruby on rails http get request (4)
Estoy haciendo una solicitud HTTP con Ruby usando Net :: HTTP, y no puedo averiguar cómo obtener todos los encabezados de respuesta.
Intenté response.header
y response.headers
y nada está funcionando.
El objeto de respuesta en realidad contiene los encabezados.
Consulte " Net::HTTPResponse " para obtener más información.
Tu puedes hacer:
response[''Cache-Control'']
También puede llamar a each_header
o al objeto de respuesta para iterar a través de los encabezados.
Si realmente desea que los encabezados estén fuera del objeto de respuesta, llame a response.to_hash
La respuesta Net::HTTPResponse
contiene encabezados de Net::HTTPHeader
que puede obtener con el método each_header
, como dice @Intrepidd, que devolverá un enumerador como se muestra a continuación:
response.each_header
#<Enumerator: #<Net::HTTPOK 200 OK readbody=true>:each_header>
[
["x-frame-options", "SAMEORIGIN"],
["x-xss-protection", "1; mode=block"],
["x-content-type-options", "nosniff"],
["content-type", "application/json; charset=utf-8"],
["etag", "W//"51a4b917285f7e77dcc1a68693fcee95/""],
["cache-control", "max-age=0, private, must-revalidate"],
["x-request-id", "59943e47-5828-457d-a6da-dbac37a20729"],
["x-runtime", "0.162359"],
["connection", "close"],
["transfer-encoding", "chunked"]
]
Puede obtener el hash real utilizando el método to_h
como se muestra a continuación:
response.each_header.to_h
{
"x-frame-options"=>"SAMEORIGIN",
"x-xss-protection"=>"1; mode=block",
"x-content-type-options"=>"nosniff",
"content-type"=>"application/json; charset=utf-8",
"etag"=>"W//"51a4b917285f7e77dcc1a68693fcee95/"",
"cache-control"=>"max-age=0, private, must-revalidate",
"x-request-id"=>"59943e47-5828-457d-a6da-dbac37a20729",
"x-runtime"=>"0.162359",
"connection"=>"close",
"transfer-encoding"=>"chunked"
}
Si necesita una salida fácil de usar , entonces puede utilizar each_capitalized
:
response.each_capitalized { |key, value| puts " - #{key}: #{value}" }
Esto imprimirá:
- Content-Type: application/json; charset=utf-8
- Transfer-Encoding: chunked
- Connection: keep-alive
- Status: 401 Unauthorized
- Cache-Control: no-cache
- Date: Wed, 28 Nov 2018 09:06:39 GMT
Tenga en cuenta que la biblioteca RestClient
tiene el comportamiento esperado para response.headers
.
response.headers
{
:server => "nginx/1.4.7",
:date => "Sat, 08 Nov 2014 19:44:58 GMT",
:content_type => "application/json",
:content_length => "303",
:connection => "keep-alive",
:content_disposition => "inline",
:access_control_allow_origin => "*",
:access_control_max_age => "600",
:access_control_allow_methods => "GET, POST, PUT, DELETE, OPTIONS",
:access_control_allow_headers => "Content-Type, x-requested-with"
}