HTTParty 和通过令牌授权
Posted
技术标签:
【中文标题】HTTParty 和通过令牌授权【英文标题】:HTTParty and authorization via token 【发布时间】:2014-06-30 08:00:49 【问题描述】:HTTParty 在 CURL 工作正常的情况下返回 401。不确定如何在标头中传递令牌。
工作(200):
curl http://localhost:3020/api/products -H 'Authorization: Token token="111"'
不工作(401):
HTTParty.get('http://localhost:3020/api/products', headers: "Authorization: Token token" => '111')
我只尝试了"Authorization" => '111'
和"token" => '111'
,但结果相同。
【问题讨论】:
【参考方案1】:设法使其工作如下。
HTTParty.get("http://localhost:3020/api/products", headers: "Authorization" => "Token token=\"111\"")
【讨论】:
标题部分最后缺少引号。应该是: headers: "Authorization" => "Token token=\"111\"") 您实际上不必包含111
的引号
其实应该是headers: "Authorization" => "Bearer your_token_here"
【参考方案2】:
如果您想动态设置类的标题,这也有效,此示例用于获取 Dun and Bradstreet 的授权令牌
require 'httparty'
require 'certified'
class DnbAuth
include HTTParty
debug_output $stdout
base_uri "https://maxcvservices.dnb.com/rest/Authentication"
def initialize(ct,u,p)
self.class.headers 'Content-type' => "#ct"
self.class.headers 'x-dnb-user' => "#u"
self.class.headers 'x-dnb-pwd'=> "#p"
end
def token()
response = self.class.post("/")
end
end
ct = 'text/xml'
u = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
p = 'xxxxxx'
xx = DnbAuth.new(ct,u,p)
puts xx.token.message
【讨论】:
你也可以像base_uri一样定义headers,而不是在initialize方法中做。显然,前提是它不依赖于传递给初始化方法的任何变量。例如,您可以使用它为 API 设置 Authorization 标头。以上是关于HTTParty 和通过令牌授权的主要内容,如果未能解决你的问题,请参考以下文章
使用 Rails 和 HTTParty 将 JSON 发布到 API
Laravel 通过 Passport 实现 API 请求认证:隐式授权令牌