Ruby等效于设置HTTP GET头

时间:2012-12-15 04:51:54

标签: ruby http-headers

在C#中,它相当简单,并且不需要花费超过几分钟的谷歌:

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(@"http://www.example.com?q=someValue");
request.Headers.Add("Authorization: OAuth realm=\"example.com\" oauth_consumer_key=\"BCqrstoO\" ... so on and so forth");
string resultString = "";
using (StreamReader read = new StreamReader(request.GetResponse().GetResponseStream(), true))
{
    resultString = read.ReadToEnd();
}

尝试在Ruby中完成它并不是那么直接(或者只是我缺少的愚蠢)。 我一直在寻找,我找到答案的最接近的事情是How to make an HTTP GET with modified headers?Send Custom Headers in Ruby

所以我的问题,我想,归结为

  1. 如何将标题设置为一个直接的字符串?
  2. 为什么这两个示例会按照它们的格式显示标题?
  3. 我要求甚至是好的约定,如果没有,我如何格式化我在这些Ruby方法要求的约定中尝试做的事情?
  4. 到目前为止,我尝试了两个例子,这是我最近的非工作尝试:

    headers = "Authorization: OAuth realm=\"example.com\" oauth_consumer_key=\"BCqrstoO\" ... so on and so forth" 
    uri = URI("www.example.com")
    http = Net::HTTP.new(uri.host, uri.port)
    
    http.get(uri.path, headers) do |chunk|
      puts chunk
    end
    

2 个答案:

答案 0 :(得分:5)

使用open-uri。例如:

require 'open-uri'

open("http://www.ruby-lang.org/en/",
    "User-Agent" => "Ruby/#{RUBY_VERSION}",
    "From" => "foo@bar.invalid",
    "Referer" => "http://www.ruby-lang.org/") {|f|
    # ...
  }

答案 1 :(得分:3)

如果您在此时检查此信息,Net:HTTPRequest对象允许您轻松添加标题。

Net::HTTP.start(uri.host, uri.port) do |http|
    request = Net::HTTP::Get.new uri
    request['my-header'] = '1'
    http.request request do |response|
        puts response
    end
end