在Ruby中,如何获取将由net/http(s)或open-uri请求发送的HTTP请求头信息提出请求。在发出请求之前从Ruby Net :: HTTP请求中获取头文件
在某些情况下,在URI中创建签名字符串时使用标头。当然有一些方法可以获取将要发送的请求标头。例如,这些应该包含“主机:”标题。
在Ruby中,如何获取将由net/http(s)或open-uri请求发送的HTTP请求头信息提出请求。在发出请求之前从Ruby Net :: HTTP请求中获取头文件
在某些情况下,在URI中创建签名字符串时使用标头。当然有一些方法可以获取将要发送的请求标头。例如,这些应该包含“主机:”标题。
Net :: HTTP类似乎都使用Net :: HTTPHeader作为mixin。您应该能够在请求对象上使用to_hash()以一次获取所有标题,或者each_header()/each()一次迭代一个标题。
看到很好的红宝石2.0.0 http://ruby-doc.org/stdlib-2.0/libdoc/net/http/rdoc/Net/HTTP.html#label-Setting+Headers
作品 - 但你是正确的,不同的行为在1.9.3
require 'net/http'
uri = URI('http://github.com/ruby')
http_request = Net::HTTP::Get.new(uri)
http_request.each_header { |header| puts header }
# => accept-encoding
# => accept
# => user-agent
# => host
http_response = Net::HTTP.start(uri.hostname, uri.port) do |http|
http.request(http_request)
end
require 'uri'
require 'net/http'
uri = URI.parse('http://github.com/ruby')
http_request = Net::HTTP::Get.new(uri.path)
http_request.each_header { |header| puts header }
# => accept
# => user-agent
http_response = Net::HTTP.start(uri.hostname, uri.port) do |http|
http.request(http_request)
end
http_request.each_header { |header| puts header }
# => accept
# => user-agent
# => host
虽然上面应该可以获得明确设置的标题列表,但我不确定它是否会包含在adva中在发送请求时,Net :: HTTP可能会添加任何其他头文件('主机'就是一个完美的例子......完全可能这个头文件只在最后一秒自动生成)。 – 2013-07-27 17:05:48
嗯..是的,这就是我所关心的。我已经找到了each_header。我很高兴假设URI字符串中的“Host:”标题,但我担心可能会自动创建其他标题,我会错过。 – rewolf