[英]Get response headers from Ruby HTTP request
I'm making an HTTP request with Ruby using Net::HTTP, and I can't figure out how to get all the response headers.我正在使用 Net::HTTP 使用 Ruby 发出 HTTP 请求,但我不知道如何获取所有响应标头。
I tried response.header
and response.headers
and nothing is working.我尝试了
response.header
和response.headers
,但没有任何效果。
The response object actually contains the headers.响应对象实际上包含标题。
See " Net::HTTPResponse " for more infomation.有关更多信息,请参阅“ Net::HTTPResponse ”。
You can do:你可以做:
response['Cache-Control']
You can also call each_header
or each
on the response object to iterate through the headers.您还可以在响应对象上调用
each_header
或each
以遍历标头。
If you really want the headers outside of the response object, call response.to_hash
如果您真的想要响应对象之外的标头,请调用
response.to_hash
The response Net::HTTPResponse
contains headers from Net::HTTPHeader
which you can get from each_header
method as said by @Intrepidd which will return an enumerator as below:响应
Net::HTTPResponse
包含来自Net::HTTPHeader
标头,您可以从each_header
方法中获取,如each_header
所述,它将返回一个枚举器,如下所示:
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"]
]
You can get the actual hash using to_h
method as below:您可以使用
to_h
方法获取实际哈希值,如下所示:
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"
}
Note that the RestClient
library has the expected behaviour for response.headers
.请注意,
RestClient
库具有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"
}
If you need user friendly output then each_capitalized
can be used:如果您需要用户友好的输出,则可以使用
each_capitalized
:
response.each_capitalized { |key, value| puts " - #{key}: #{value}" }
This will print:这将打印:
- 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
To store it in a hash =>将其存储在哈希中 =>
response_headers = {}
your_object.response.each { |key, value| response_headers.merge!(key.to_s => value.to_s) }
puts response_headers
这也可以使用HTTParty作为替代方案轻松实现:
HTTParty.get(uri).headers
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.