我已经尝试过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,因此很难将所有内容组合在一起。
任何见识将不胜感激。真的很想了解这一点。
答案 0 :(得分:0)
我听不清您说的话有效,但错了,但是Charity Navigator Data API请求通过参数(而非标头)发送 app_id
和app_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 docs和this SO。您也可以use parameters options使用其他客户端gem。我建议强烈使用它。