【问题标题】:HTTParty and authorization via tokenHTTParty 和通过令牌授权
【发布时间】: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',但结果相同。

【问题讨论】:

    标签: ruby-on-rails curl access-token httparty


    【解决方案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 标头。
    猜你喜欢
    • 2018-06-13
    • 2020-12-22
    • 2013-04-11
    • 2019-02-26
    • 2014-01-13
    • 2019-03-21
    • 1970-01-01
    • 2013-06-05
    • 2018-11-08
    相关资源
    最近更新 更多