RestClient/HTTParty 未使用身份验证参数

RestClient/HTTParty authentication parameters not being used

对于 API 我试过的电话..

在 RestClient 中

有效但错误:

response = RestClient::Request.execute(
method: :get,
url: 'https://api.data.charitynavigator.org/v2/Organizations?app_id=2b1ffdad&app_key=XXXX',
)

不起作用(403:禁止访问):

response = ::RestClient::Request.execute(method: :get, url: 'https://api.data.charitynavigator.org/v2/Organizations?app_id=2b1ffdad', 
headers: {app_key: 'XXXX'})

在 HTTParty

也不起作用(缺少身份验证参数):

require 'rubygems'
require 'httparty'


class Charity
  include HTTParty

  base_uri 'https://api.data.charitynavigator.org/v2/'

  def posts

    headers = {
      "app_id"  => "2b1ffdad",
      "app_key"  => "XXXX"
    }

    self.class.get("/Organizations/",
    :headers => headers
    )
  end
end


charity = Charity.new
puts charity.posts

供参考:https://charity.3scale.net/docs/data-api/reference

是语法吗?我也调查了 Faraday,但 运行 调查了类似的问题。许多带有 rails 的第 3 方 API 示例似乎使用了早已过时的 API,因此很难将所有内容拼凑在一起。

如有任何见解,我们将不胜感激。好想明白这个。

我无法理解你的说法有效但错误但是慈善导航数据API请求发送app_idapp_key键通过参数,不是header

您的第一个代码看起来是正确的。

第二个代码,app_key 密钥是由 header 发送的,而不是参数。所以 API 响应 403.

第三个代码,用httpart编码gem,不使用参数而是headers。所以 Charity Navigator Data API 响应 Authentication parameters missing 错误。很正常。

require 'httparty'

class StackExchange
  include HTTParty
  base_uri 'https://api.data.charitynavigator.org/v2/'

  def posts
    options = { 
      query: {
        app_id: '2b1ffdad',
        app_key: 'XXXX'
      }
    }

    self.class.get("/Organizations/", options)
  end
end

charity = Charity.new
puts charity.posts

但是你可以在httparty中通过query option使用参数。也阅读 rest-client gem 中的 httparty docs and this SO. And you can use parameters options。而且强烈推荐使用。