【问题标题】:how do I include a header in an http request in ruby如何在 ruby​​ 的 http 请求中包含标头
【发布时间】:2016-11-07 17:49:01
【问题描述】:

让下面的代码工作:

uri = URI.parse("http://www.ncdc.noaa.gov/cdo-web/api/v2/datasets/")
response = Net::HTTP.get_response(uri)

现在我还需要传递一个包含此令牌哈希的标头:

token: "fjhKJFSDHKJHjfgsdfdsljh"

我找不到任何有关如何执行此操作的文档。我该怎么做?

【问题讨论】:

  • Ruby 有很多 gem 可以让 HTTP 比 Net::HTTP 更容易使用。我建议研究这些并选择一个。 Net::HTTP 确实适用于其他什么都不存在的时代。

标签: ruby-on-rails ruby http httprequest net-http


【解决方案1】:

get_response 是发出请求的简写,当您需要更多控制权时 - 自己发出完整的请求。

在ruby标准库here中有一个例子:

uri = URI.parse("http://www.ncdc.noaa.gov/cdo-web/api/v2/datasets/")
req = Net::HTTP::Get.new(uri)
req['token'] = 'fjhKJFSDHKJHjfgsdfdsljh'

res = Net::HTTP.start(uri.hostname, uri.port) {|http|
  http.request(req)
}

【讨论】:

  • 谢谢,但这不是两次发送请求吗?当你调用 Net::Http.new 时,那不是发送请求吗?
  • @JPB 不,它初始化请求,连接到服务器然后发送请求。
  • 这不再起作用了。可能是https (SSL) 问题。
【解决方案2】:

虽然您当然可以使用 Net::HTTP 来实现这个目标,但 gem excon 可以让您更轻松地做到这一点:

require 'excon'
url = 'http://www.ncdc.noaa.gov/cdo-web/api/v2/datasets/'
Excon.get(url, headers: {token: 'fjhKJFSDHKJHjfgsdfdsljh'})

【讨论】:

猜你喜欢
  • 2013-10-27
  • 2017-11-28
  • 1970-01-01
  • 2012-09-02
  • 2019-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多