使用带有graphql查询的API在R上抛出401错误但在Python上工作正常

时间:2019-07-26 19:14:01

标签: python r rest graphql http-status-code-401

我需要通过API访问一些信息。我需要在R上执行此操作。我尝试在Python上执行此操作,效果很好,但在R上执行相同操作时却遇到401错误。

我有API密钥,也知道要执行的查询。我在下面附加了Python和R代码。

Python:

import requests

headers = {
    'Content-Type': 'application/json',
    'Authorization': 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX',
}

query = """
{
    boards (ids: 157244624) {
        permissions
    }
}
"""

response = requests.get('https://XYZwebsite.com/', headers=headers, json={'query': query})

R:

require(httr)

headers = c(
  `Content-Type` = 'application/json',
  `Authorization` = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'
)

data = '{
    boards (ids: 157244624) {
        permissions
    }
}'

res <- GET(url = 'https://XYZwebsite.com/', add_headers(.headers=headers), body = data)

我是否错过了R代码中的某些内容?看起来几乎一样,但是出于某些奇怪的原因,我在R上遇到了401错误。

1 个答案:

答案 0 :(得分:0)

也许尝试:

r <- GET("https://XYZwebsite.com/", 
         add_headers(`Content-Type` = "application/json",
                     `Authorization` = "XXXXXXXXXXXXXXXXXXXXXXXXXXXX"),
         body = data)

编辑: 使用gist,您可以工作:

先认证:

token <- GQL(auth_query)$authenticate$jwtToken

然后,您可以通过传递在响应中获得的令牌来运行查询:

GQL(current_person_query, .token = token)

似乎您正在尝试同时做两件事。

如果您已经拥有令牌,那么您似乎不正确地传递了令牌:

auth_header <- paste("bearer", .token)
res <- POST(.url, body = pbody, encode="json", add_headers(Authorization=auth_header), ...)

应作为“承载者XXXXXXXXXXXXXXXXX”传递。