Ruby rest-client 401 Несанкционированный после публикации данных - PullRequest
0 голосов
/ 28 января 2019

Я новичок в использовании rest-client.Я знаю, что чего-то не хватает, но я пытаюсь сделать следующее:

  1. Публикация в конечную точку входа в систему для аутентификации
  2. После аутентификации отправьте текст CSV в другую конечную точку, которая требуетзарегистрированный пользователь

Проверка подлинности прошла успешно, однако я получаю 401 Unauthorized при выполнении шага 2.

rest_client = RestClient

login_response = @global_rest_client.post(
    host + 'LOGIN ENDPOINT', 
    { userName: 'user', password: 'password'},
    headers: {'Content-Type': 'application/x-www-form-urlencoded'}
)

import_response = rest_client.post(
        host + 'IMPORT DATA ENDPOINT',
        headers: { 'X-System-Name': 'AndroidMobile', 'Content-Type': 'multipart/form-data },
        csv: csv_string
    )   

Мое понимание того, как работает аутентификация, может быть неправильным.Я предполагаю, что до тех пор, пока один и тот же экземпляр клиента имеет успешный вход в систему, публикация данных csv также будет успешной.

Я ценю любой вклад.

1 Ответ

0 голосов
/ 28 января 2019

HTTP (1.1) не имеет состояния, поэтому запрос не содержит никакой информации о предыдущих запросах, если только эта информация не закодирована и не добавлена ​​в запрос каким-либо образом (например, файлы cookie или заголовки).Поэтому, когда вы отправляете запрос на импорт, сервер не знает, аутентифицированы ли вы или нет, даже если вы только что сделали запрос на вход в систему.

Вы должны будете включить токен, полученный от вашего запроса на вход в последующие запросы.,Это должно быть указано в заголовке «Авторизация».

Например:

auth_token = login_response["success"]["token"] # or whatever the key is for the token

import_response = rest_client.post(
    host + 'IMPORT DATA ENDPOINT',
    headers: { 'Authorization': "Bearer #{auth_token}", 'X-System-Name': 'AndroidMobile', 'Content-Type': 'multipart/form-data },
    csv: csv_string
)

Способ аутентификации зависит от сервера и может отличаться в разных случаях.Таким образом, сайт, к которому вы обращаетесь, может ожидать, что заголовок авторизации будет похож на "Token #{auth_token}" или что-то еще, но они должны упомянуть об этом в своей документации.

...