使用带有 graphql 查询的 API 在 R 上引发 401 错误但在 Python 上工作正常
Posted
技术标签:
【中文标题】使用带有 graphql 查询的 API 在 R 上引发 401 错误但在 Python 上工作正常【英文标题】:Consuming API with graphql queries throwing 401 error on R but working fine on Python 【发布时间】:2019-12-05 03:24:59 【问题描述】:我需要通过 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】:或许可以试试:
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”传递。
【讨论】:
我猜“数据”部分的格式不正确。url <- "http://httpbin.org/post" body <- list(a = 1, b = 2, c = 3) # Form encoded r <- POST(url, body = body, encode = "form")
在the docs 中,正文是一个列表,而不是字符串。 (至少,对于 POST 请求)。
是的,没错。但我的数据是 GraphQL 查询的形式。我参考了 (gist.github.com/rentrop/83cb1d8fc8593726a808032e55314019) 这个 github 文档,结果发现我们可以在数据部分使用 GraphQl 查询本身。请看看,让我知道你的想法。
我认为您的代码实际上是在尝试进行身份验证,但看了一眼,您似乎收到了 401(未经授权的错误),因为您必须在运行查询之前进行身份验证。查看更新。【参考方案2】:
在我的情况下,api 密钥已过期......真的很长的旅程让我去:
-
放大更新接口
遍历所有
选择 api 密钥
输入新的 api 密钥名称
输入 365 天,无进一步变化
amplify push 不会检测到变化,所以使用 amplify push --force
也许有帮助
【讨论】:
顺便说一句,我从没想过***的输入会像编辑器那么难以上是关于使用带有 graphql 查询的 API 在 R 上引发 401 错误但在 Python 上工作正常的主要内容,如果未能解决你的问题,请参考以下文章
嵌套的 Mongoose 查询数据未显示在 GraphQL 查询中
使用 AWS Amplify Auth 和 GraphQL API,您将如何进行一些公共和一些私有查询/突变调用?
使用 apolloclient 在 android 中 Graphql 查询导致“标量的意外枚举”