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

时间:2018-12-19 01:49:07

标签: ruby-on-rails rest-client httparty

我已经尝试过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

是语法吗?我也研究过法拉第,但在那里遇到了类似的问题。许多带有rails的第三方API示例似乎都使用了过时的API,因此很难将所有内容组合在一起。

任何见识将不胜感激。真的很想了解这一点。

1 个答案:

答案 0 :(得分:0)

我听不清您说的话有效,但错了,但是Charity Navigator Data API请求通过参数(而非标头)发送 app_idapp_key

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

第二个代码app_key键是由标头而不是参数发送的。因此API响应403。

用httpart gem编码的第三代码不使用参数,而是使用标头。因此,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使用参数。阅读httparty docsthis SO。您也可以use parameters options使用其他客户端gem。我建议强烈使用它。