Ошибка авторизации 401 с использованием GET в httr (R).

Я пытаюсь сделать вызов GET в R, используя httr, и все время получаю ошибку авторизации 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
<-

Я ожидаю, что он вернет код 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":"[email protected]","id":5599}'

Итак, снова вопрос, что я делаю неправильно в R или вы можете мне подсказать? Это не будет воспроизведено для вас, потому что срок действия токена истек, и я не могу им поделиться. Может дело в пробеле в авторизации? авторизация = "Носитель 935845d8fc1124757e66ce04d2c75d0"? Есть ли подсказки в подробном выводе вызова get в R?

Для справки, это страница API сайта: https://developer.locusenergy.com/

Сайт требует аутентификации OAUTH2 для возврата токена. Я не включил этот код, но убедился, что токен работает с Python и Postman.


person Jonathan    schedule 16.08.2015    source источник


Ответы (1)


Прямо сейчас вы передаете свои значения авторизации в строке запроса кода httr, а не в заголовке http, как вы делаете в коде python. Вместо этого используйте

GET(url = "https://api.locusenergy.com/v3/clients/5599",
    accept_json(),
    add_headers(Authorization="Bearer c935845d8fc1124757e66ce04d2c75d0")
)
person MrFlick    schedule 16.08.2015
comment
Стократное спасибо. Это имеет смысл и работает как шарм! - person Jonathan; 16.08.2015