设置HTTP GET请求头的Ruby等效方法

3
在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实现并不是那么直接(或者只是我漏掉了什么愚蠢的东西)。我一直在寻找答案,最接近的是如何使用修改后的标头进行HTTP GET?在Ruby中发送自定义标头
所以我的问题归结为:
  1. 如何将标题设置为简单的字符串?
  2. 为什么这两个示例显示的标题格式如此?
  3. 我提出的要求是否符合良好的惯例,如果不是,如何按照这些Ruby方法的惯例格式化我要做的事情?
到目前为止,我尝试了这两个示例,以下是我最近的未能正常工作的尝试:
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

1
如果您删除C#标签并仅询问如何在Ruby中添加HTTP请求的标头可能会有所帮助。在HTTP请求中,标头只是由冒号分隔的键/值对。因此,在您的示例中,密钥是“Authorization”,映射到该密钥的值是右侧的所有内容。 - Despertar
你尝试过什么?或者,至少,你目前使用的是什么代码来发出请求? - Andrew Marshall
@Despertar 所以基本上我只需要按照这种方式设置它:'Authorization' => 'OAuth realm="example.com" oauth_consumer_key="BCqrstoO" ...等等'? - Niko
@PaulBakerSaltShaker 嗯,看起来不错。Diego下面的示例应该很符合您想要做的事情。您可以添加任何需要的键/值对,例如您正在使用的oauth。 - Despertar
2个回答

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|
    # ...
  }

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

更多关于此的信息和示例,请访问ruby-doc.org/stdlib-2.4.2/libdoc/net/http/rdoc/Net/HTTP.html。 - Aaron Thomas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接