Эмулировать Python HTTP-запрос, используя JS Fetch - PullRequest
0 голосов
/ 22 февраля 2020

Я могу успешно выполнить простой HTTP-запрос, используя python запросов:

def renew_token():
    """
    Send a request to renew the login token
    """
    url = url
    fields = {
        "username": "username",
        "password": "password"
        }
    r = requests.post(url, data=fields)
    print(r)

Я пытаюсь сделать точно такой же запрос, используя javascript fetch, но безуспешно.

async function renewToken(url = '', fields = {}) {
    const response = await fetch(url, {
      method: 'POST'
      data: JSON.stringify(fields),
      mode: 'cors',
      cache: 'no-cache', 
      headers: {
        'Content-Type': 'application/json',
        //'Content-Type': 'application/x-www-form-urlencoded',
      },
    });
    return await response.json();
  }

  renewToken('url', { username: 'username', password: 'password' })
  .then((data) => {
  console.log(data); // JSON data parsed by `response.json()` call
  });

Я получаю сообщение об ошибке:

{ data: null,
  message: 'No username or password provided',
  status: 'api-error' }

, что означает, что с типом содержимого что-то не так. Я попытался изменить content-type на 'application / x- www-form-urlencoded', но я получаю ту же ошибку.

Чего не хватает для эмуляции запроса python с использованием fetch?

1 Ответ

0 голосов
/ 22 февраля 2020

Пришлось использовать данные формы, а не отправленные данные в теле:

async function renewToken(url = '', fields = {}) {
            const response = await fetch(url, {
              method: 'POST', //
              body: 'username=username&password=password',
              headers: {
                'Content-Type': 'application/x-www-form-urlencoded',
              },
            });
            return await response.json(); 
          }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...