【发布时间】:2020-03-14 23:31:32
【问题描述】:
我正在尝试向此API 发出 GET 请求,该请求在 POSTMAN 中运行良好。在我的应用程序中,我使用 HTTParty 发出相同的请求,但我未能正确构造请求,导致 {"statusCode"=>404, "error"=>"Not Found", "message"=>"Not Found"} 返回。我尝试了很多变体,但没有找到正确的结构或参数命名。这是供参考,其中 ENV["X-CMC_PRO_API_KEY"] 是保存我的 api 密钥的环境变量。
url = 'https://pro-api.coinmarketcap.com/v1/cryptocurrency/quotes/latest/'
request = HTTParty.get(url,
{
headers: {
"key": ENV["X-CMC_PRO_API_KEY"],
"Accept": "application/json"
},
data: {
id: 1
},
params: {
slug: self.slug
}
}
)
response = JSON.parse(request.body)
API 文档建议 cURL 应该是这样的
curl -H "X-CMC_PRO_API_KEY: apikey" -H "Accept: application/json" -d "id=1" -G https://pro-api.coinmarketcap.com/v1/cryptocurrency/quotes/latest
这些是来自 POSTMAN 的屏幕,其中请求返回正确的响应。 image1image2
感谢您对帮助我完成此请求的任何意见。我是新手,HTTParty 文档没有帮助,我也没有找到任何其他类似的例子。
【问题讨论】:
-
这并不是您问题的直接答案,但我有一种方法,我认为可能会对您有所帮助。在尝试使用 HTTPARTY 访问基于 eBay json 的 API 时,我遇到了与您非常相似的问题。我尝试了几个月,甚至联系了 eBay 开发团队。在我刚刚看到你的帖子之后,我突然想到问题可能以某种方式存在于 HTTPARTY 中(我不确定是否真的是这种情况),但我在谷歌上快速搜索了替代品并找到了 Typhoeus ,并且我在大约 5 分钟内启动并运行了它:github.com/typhoeus/typhoeus
-
Typhoeus 的语法几乎与 HTTPARTY 完全相同。到目前为止,我可以说的唯一显着区别是,必须实际“运行”请求才能触发它被发送。我希望这会有所帮助。
-
感谢 @malikilam 我能够用 HTTParty 解决它。我似乎仍然无法弄清楚如何用 ENV 变量替换我的 API 密钥,你能帮忙吗?
-
很高兴您能够解决问题。我相信我可以帮助使用环境变量。您可以通过首先在名为 your_application_folder/config/application.yml 的文件中定义环境变量来做到这一点。只需将变量名放在 ALLCAPS 中,并将您分配给它的值(在本例中为您的密钥)按以下格式放入此 application.yml 文档中: API_KEY: 08698h909j909e4de1eb9 。重新启动 Rails 应用程序后,您可以使用以下语法 ENV["API_KEY"] 访问应用程序中各处的变量。
-
确保将 application.yml 文件添加到您的 .gitignore 文件中,这样您的密钥就不会存储在您的 git 存储库中。
标签: rubygems httprequest api-key ruby-on-rails-6 httparty