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
4

2 回答 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|
    # ...
  }
于 2012-12-15T06:17:16.517 回答
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
于 2017-05-18T11:18:11.773 回答