【问题标题】:Multiple Authentication in CURLCURL 中的多重身份验证
【发布时间】:2019-07-23 16:23:41
【问题描述】:

上下文

我想从 R 访问 API 并拥有正确的凭据。

问题是身份验证需要传递三个参数(用户名、密码和组织)。

我不熟悉来自 R 的 API 调用,也不知道如何传递这个“组织”参数。

示例

请求令牌的 API 调用示例如下(摘自文档):

curl -X POST "https://URL.com" \
-H "Content-Type: application/json" \
--data "{\"user_name\": \"<username>\" \
\"password\": \"<mypassword>\",\
\"organisation\": \"<organisation>\"}"

使用crul包,我试过了:

require("crul")

z <- crul::HttpClient$new(url = "https://THEURL.com", 
    auth(user = "myuser", 
         pwd = "mypwd"))
z$get()

返回:

<crul response>
url: https://THEURL.com
request_headers: 
User-Agent: libcurl/7.59.0 r-curl/3.3 crul/0.8.0
Accept-Encoding: gzip, deflate
Accept: application/json, text/xml, application/xml, */*
response_headers: 
status: HTTP/1.1 403 Forbidden
content-type: application/json
content-length: 211
connection: keep-alive
x-amzn-errortype: IncompleteSignatureException

我假设x-amzn-errortype 指的是缺少的organisation 身份验证变量。

问题

如何将变量“组织”传递给函数?

或者有更好的方法吗?

【问题讨论】:

    标签: r


    【解决方案1】:

    我认为在处理 HTTP 请求时使用包httr 会更容易。我认为您的示例请求可能是:

    library(httr)
    
    POST("https://THEURL.com",
         body = list(user_name = "<username>", password = "<mypassword>", organisation = "<organisation>"),
         encode = "json")
    

    【讨论】:

    • 这好多了,返回 200-OK!我期待收到一个 Token 发回,但返回的列表似乎不包含这个 - 任何想法都非常感谢。
    • 好吧,因为您既没有发布 API 规范也没有发布结果,所以我无法知道返回的内容。一般的过程是使用content()函数提取响应的主体,然后在必要时进行解析。
    • 就是这样! content() 返回令牌。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-23
    • 2021-06-20
    • 2010-12-07
    • 2013-08-17
    • 2017-09-15
    • 2016-12-19
    • 2012-06-19
    相关资源
    最近更新 更多