Запрос не выполнен, возвращен код 400. Усеченный ответ сервера - скрипты Google - PullRequest
0 голосов
/ 07 февраля 2020

Я очень плохо знаком с API. Я успешно построил API в почтальоне и получил данные, которые хотел. Я сгенерировал пример кода, предоставленный почтальоном в формате JavaScript:

var myHeaders = new Headers();
myHeaders.append("Content-Type", "application/x-www-form-urlencoded");
myHeaders.append("Authorization", "Basic ZGVhbGdwwitpflgnBvcnQ6ZldZUmZvVEU5a2hNaFZtUlBlcU1VZ3J5eFRhWXBwN0U3d1hdllBZw==");

var urlencoded = new URLSearchParams();
urlencoded.append("grant_type", "password");
urlencoded.append("username", "123456789");
urlencoded.append("password", "password123!");

var requestOptions = {
  method: 'POST',
  headers: myHeaders,
  body: urlencoded,
  redirect: 'follow'
};

fetch("https://accounts.autoscout24.com/oidc/token", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));

Однако я хочу встроить этот API в google scripts , используя функцию UrlFetchApp. Пока я делаю это:

function webRelay(){
  var url = 'https://accounts.autoscout24.com/oidc/token';

  var username = "123456789";
  var password = "password123!";

  var headers =
  {
    "Content-Type" :  "application/x-www-form-urlencoded" ,
    "Authorization" : "Basic ZGVhbGdwwitpflgnBvcnQ6ZldZUmZvVEU5a2hNaFZtUlBlcU1VZ3J5eFRhWXBwN0U3d1hdllBZw=="
  }

  var options =
  { 
    "grant_type" : "password",
    "timeout": 0,
    "method" : "post",
    "headers": headers
  };

  // Getting "bad request" here - check the username & password
  var result = UrlFetchApp.fetch(url, options);
  var state=result.getContentText(); 



}

Но я получаю следующую ошибку:

Запрос не выполнен для https://accounts.autoscout24.com возвращенного кода 400. Сокращенный ответ сервера: { "error": "invalid_request"} (используйте опцию muteHttpExceptions для проверки полного ответа) (строка 22, файл "api")

Не могли бы вы помочь мне выяснить, что я делаю неправильно? Большое спасибо!

1 Ответ

1 голос
/ 08 февраля 2020
  • Вы хотите преобразовать Javascript в вашем вопросе в Google Apps Script.
  • Вы уже подтвердили, что ваш Javascript сработал.

Я мог понять, как указано выше. Для этого как насчет следующей модификации?

Точки модификации:

  • В options UrlFetchApp.fetch (url, options) , there are no properties of grant_type and timeout`.
  • Когда ваш Javascript виден, данные отправляются как данные формы.
  • По умолчанию "Content-Type" UrlFetchApp имеет значение application/x-www-form-urlencoded.
  • В вашем сценарий, username не используется.

Когда вышеуказанные точки отражаются в сценарии, он становится следующим:

Модифицированный сценарий:

Перед использованием В измененном сценарии укажите переменные username, password и headers.

function webRelay(){
  var url = 'https://accounts.autoscout24.com/oidc/token';
  var username = "123456789";
  var password = "password123!";
  var payload = {
    "grant_type": "password",
    "password": password, 
    "username": username
  }
  var headers = {"Authorization" : "Basic ###"};
  var options = { 
    "method" : "post",
    "headers": headers,
    "payload": payload,
  };
  var result = UrlFetchApp.fetch(url, options);
  var state = result.getContentText();
  Logger.log(state)
}
  • В этом измененном сценарии ваш токен был удален с помощью ###. Когда вы используете это, пожалуйста, измените его.

Ссылка:

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

...