在 httr (R) 中使用 GET 的授权错误 401。
Authorization Error 401 using GET in httr (R).
我正在尝试使用 httr 在 R 中进行 GET 调用,但我一直收到授权 401 错误。
R代码:
testfunction2 <- function()
{
set_config(verbose())
locus_url <- "https://api.locusenergy.com/v3/clients/5599"
r <- GET(url = "https://api.locusenergy.com/v3/clients/5599",
query=list(authorization="Bearer c935845d8fc1124757e66ce04d2c75d0"),
Accept="application/json")
}
结果:
> print(testfunction2())
-> GET /v3/clients/5599
authorization=Bearer%20c935845d8fc1124757e66ce04d2c75d0 HTTP/1.1
-> User-Agent: libcurl/7.39.0 r-curl/0.9.1 httr/1.0.0
-> Host: api.locusenergy.com
-> Accept-Encoding: gzip, deflate
-> Cookie: AWSELB=D91FBFE1087EF6EBC125A126777051237474A8A060B6095B8E3C16151308453F8556B2A2E90CB2178F365FAA8AA8C29B124D15CA3EB859CFE615428E8D55C393ABB5B436BF
-> Accept: application/json, text/xml, application/xml, */*
->
<- HTTP/1.1 401 Unauthorized
<- Content-Type: application/json
<- Date: Sun, 16 Aug 2015 05:02:27 GMT
<- Server: Apache-Coyote/1.1
<- transfer-encoding: chunked
<- Connection: keep-alive
<-
我希望它 return 200 代码(而不是 401,这意味着授权错误。)
我知道令牌是正确的,因为如果我使用 Postman(google 加载项)和 Python,它就可以工作。该令牌对您不起作用,因为我更改了它,因为我无法共享它。
Python代码:
import http.client
conn = http.client.HTTPSConnection("api.locusenergy.com")
headers = {
'authorization': "Bearer 935845d8fc1124757e66ce04d2c75d0"
}
conn.request("GET", "/v3/clients/5599", headers=headers)
res = conn.getresponse()
data = res.read()
print(data)
结果来自 Python
b'{"statusCode":200,"partnerId":4202,"tz":"US/Arizona","firstName":"xxx","lastName":"xxxx","email":"xxxx@aol.com","id":5599}'
所以,问题又是我在 R 中做错了什么,或者你能给我任何提示吗?这对您来说无法重现,因为令牌已过期,我无法共享它。
难道是授权里面的space?授权="Bearer 935845d8fc1124757e66ce04d2c75d0"? R 中 get 调用的详细输出中是否有任何提示?
作为参考,这是该站点的 API 页面:
https://developer.locusenergy.com/
该站点要求对 return 令牌进行 OAUTH2 身份验证。我没有包含该代码,但我验证了令牌适用于 Python 和 Postman。
现在您正在 httr
代码的查询字符串中传递您的授权值,而不是像在 python 代码中那样在 http header 中传递。而是使用
GET(url = "https://api.locusenergy.com/v3/clients/5599",
accept_json(),
add_headers(Authorization="Bearer c935845d8fc1124757e66ce04d2c75d0")
)
我正在尝试使用 httr 在 R 中进行 GET 调用,但我一直收到授权 401 错误。 R代码:
testfunction2 <- function()
{
set_config(verbose())
locus_url <- "https://api.locusenergy.com/v3/clients/5599"
r <- GET(url = "https://api.locusenergy.com/v3/clients/5599",
query=list(authorization="Bearer c935845d8fc1124757e66ce04d2c75d0"),
Accept="application/json")
}
结果:
> print(testfunction2())
-> GET /v3/clients/5599
authorization=Bearer%20c935845d8fc1124757e66ce04d2c75d0 HTTP/1.1
-> User-Agent: libcurl/7.39.0 r-curl/0.9.1 httr/1.0.0
-> Host: api.locusenergy.com
-> Accept-Encoding: gzip, deflate
-> Cookie: AWSELB=D91FBFE1087EF6EBC125A126777051237474A8A060B6095B8E3C16151308453F8556B2A2E90CB2178F365FAA8AA8C29B124D15CA3EB859CFE615428E8D55C393ABB5B436BF
-> Accept: application/json, text/xml, application/xml, */*
->
<- HTTP/1.1 401 Unauthorized
<- Content-Type: application/json
<- Date: Sun, 16 Aug 2015 05:02:27 GMT
<- Server: Apache-Coyote/1.1
<- transfer-encoding: chunked
<- Connection: keep-alive
<-
我希望它 return 200 代码(而不是 401,这意味着授权错误。)
我知道令牌是正确的,因为如果我使用 Postman(google 加载项)和 Python,它就可以工作。该令牌对您不起作用,因为我更改了它,因为我无法共享它。
Python代码:
import http.client
conn = http.client.HTTPSConnection("api.locusenergy.com")
headers = {
'authorization': "Bearer 935845d8fc1124757e66ce04d2c75d0"
}
conn.request("GET", "/v3/clients/5599", headers=headers)
res = conn.getresponse()
data = res.read()
print(data)
结果来自 Python
b'{"statusCode":200,"partnerId":4202,"tz":"US/Arizona","firstName":"xxx","lastName":"xxxx","email":"xxxx@aol.com","id":5599}'
所以,问题又是我在 R 中做错了什么,或者你能给我任何提示吗?这对您来说无法重现,因为令牌已过期,我无法共享它。 难道是授权里面的space?授权="Bearer 935845d8fc1124757e66ce04d2c75d0"? R 中 get 调用的详细输出中是否有任何提示?
作为参考,这是该站点的 API 页面: https://developer.locusenergy.com/
该站点要求对 return 令牌进行 OAUTH2 身份验证。我没有包含该代码,但我验证了令牌适用于 Python 和 Postman。
现在您正在 httr
代码的查询字符串中传递您的授权值,而不是像在 python 代码中那样在 http header 中传递。而是使用
GET(url = "https://api.locusenergy.com/v3/clients/5599",
accept_json(),
add_headers(Authorization="Bearer c935845d8fc1124757e66ce04d2c75d0")
)