【问题标题】:How to make a token request in R?如何在 R 中发出令牌请求?
【发布时间】:2021-08-27 21:44:07
【问题描述】:

尝试获取 API 的访问令牌,以便我可以使用 R 提取数据。我使用的文档有以下说明:

以下 POST 请求显示了 Axon Evidence 令牌请求的格式:

POST /api/oauth2/token HTTP/1.1 
Host: api.evidence.com 
Content-Type: application/x-www-form-urlencoded
grant_type: client_credentials&partner_id={partner ID}&client_id={client ID}&client_secret={client secret}

注意:确保对所有参数值使用 URL 编码形式。客户端密码是 base64 编码的,因此通常以等号 (=) 结尾,必须编码为 %3D。此外,如果您使用手动 REST 客户端进行测试,请确保您知道客户端是否自动执行 URL 编码。如需更多信息,请参阅参考资料。

我正在尝试按照上述说明使用 httr 包请求令牌,但它似乎不起作用。我正在使用:

Token_Response <- POST("https://api.evidence.com/", body = "POST /api/oauth2/token HTTP/1.1
     Host: api.evidence.com 
     Content-Type: application/x-www-form-urlencoded
     grant_type=client_credentials&partner_id={partner ID}&client_id={client ID}&secret={client secret}")

很遗憾,出于安全原因,我无法重现此问题,但我希望这只是我的语法问题。

【问题讨论】:

    标签: r post oauth-2.0 token httr


    【解决方案1】:

    在使用 HTTR 时,您通常不会直接使用正文或标题。该函数可以为您完成请求的大部分格式化。正确的翻译看起来更像

    url <- "https://api.evidence.com/"
    partnerId <- "my partner ID"
    clientId <- "my client ID"
    clientSecret <- "my client secret"
    
    token_Response <- POST(url,
         encode="form",
         body=list(
           grant_type = "client_credentials", 
           partner_id = partnerId,
           client_id = clientId,
           secret = clientSecret
         )
    )
    

    为了清楚起见,我使用了一些变量,但如果您愿意,您可以将值直接放入函数调用中。

    【讨论】:

    • 谢谢!当我输入 use content(Token_Response) 时,我无法解释我返回的内容。当我使用 read_html(content(Token_Response)) 我得到“UseMethod中的错误(“read_xml”):没有适用于“c('xml_document','xml_node')”类对象的'read_xml'的适用方法”跨度>
    • 我不知道返回的是什么。但是你通常不会在 content() 调用周围使用 read_html()。
    • 我认为这是一个“找不到文件”错误,TBH。 str(content(Token_Response)) 给出以下内容: 2 $ node: $ doc : - attr(*, "class")= chr [1:2] "xml_document" "xml_node" 和 as_list 的列表(Token_Response_Content) 给出。 .很多,但是当您向下滚动到 $html$head$script[[1]] 时,它部分显示: "\n var URL_HOMEPAGE = \"/axon/dashboard\";\n var EVIDENCE_NOT_FOUND = \"/轴突/未找到证据\";\n var EULA_URL = \"/index.aspx?class=UIX&proc=ConfirmEula\";\n
    • 文档说它应该看起来像这样: { "access_token": "{token}", "token_type": "Bearer", "expires_in": "{令牌有效的秒数}", "expires_on": "{令牌不被接受的 UNIX 时间}", "not_before": "{令牌不被接受之前的 UNIX 时间}", "version": "1" , "entity": { "type": "AuthClient", "id": "{client ID}", "partner_id": "{agency ID}" } 我想我可能正需要联系该网站的所有者。我希望这只是一个 R 问题。感谢您的宝贵时间!
    猜你喜欢
    • 1970-01-01
    • 2013-11-16
    • 2019-02-19
    • 2012-11-16
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 2018-11-02
    • 1970-01-01
    相关资源
    最近更新 更多