Как мне преобразовать этот запрос cURL в UrlFetchApp? - PullRequest
2 голосов
/ 11 января 2020

Итак, сайт дал нам несколько примеров кода. Мне удалось выполнить функции GET достаточно хорошо, но я не могу ничего публиковать. Вот пример ниже

curl -X POST https://api.teachworks.com/v1/customers/family \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Token token={access_token}' \
  -d '{
        "customer": 
          {         
            "first_name": "Jake & Paula",       
            "last_name": "Jackson",
            "email": "jakej@example.com",
            "home_phone": "123-123-1234",
            "mobile_phone": "123-123-1234",
            "status": "Active"
           }
       }' 

Вот мой код

function test(){
  url = "https://api.teachworks.com/v1/customers/family";
  var token = {api_key};
  headers = {
      "Accept": "application/json",
      "Authorization": "Token token="+token
    };
  payload = '{ "customer": \
{"first_name": "Jake & Paula", \
"last_name": "Jackson", \
"email": "jakej@example.com",\
"home_phone": "123-123-1234", \
"mobile_phone": "123-123-1234", \
"status": "Active" }}';
  Logger.log(payload);
  options = {
    "headers" : headers,
    "method" : "post",
    "payload" : payload
  }
  Logger.log(options);
  response = UrlFetchApp.fetch(url,options);
  Logger.log(response);
}

Каждый раз, когда я запускаю его, я получаю одну и ту же ошибку:

Ошибка запроса https://api.teachworks.com возвращен код 400. Усеченный ответ сервера: отсутствует обязательный параметр: customer

Если я правильно понимаю, полезная нагрузка эквивалентна -d. поэтому мой код должен быть правильным. Пожалуйста, дайте мне знать, что я делаю неправильно.

1 Ответ

1 голос
/ 11 января 2020

@ theMaster был прав насчет того, что пропустил ContentType.

В заголовках принимается значение mimeType для получения на стороне клиента. contentType для опции UrlFetchApp и то же самое с Content-Type заголовков. Content-Type - это mimeType тела запроса. В вашем случае необходимо использовать contentType приложения / json. Ссылка Кстати, могу ли я спросить вас, можете ли вы подтвердить, что ваша команда curl работает нормально? комментарии источника @ Tanaike

function test(){
  url = "https://api.teachworks.com/v1/customers/family";
  var token = {api_key};
  headers = {
      "Accept": "application/json",
      "Authorization": "Token token="+token
    };
  payload = '{ "customer": \
{"first_name": "Jake & Paula", \
"last_name": "Jackson", \
"email": "jakej@example.com",\
"home_phone": "123-123-1234", \
"mobile_phone": "123-123-1234", \
"status": "Active" }}';
  Logger.log(payload);
  options = {
    "headers" : headers,
    "method" : "post",
    "payload" : payload
    "contentType" = "application/json"
  }
  Logger.log(options);
  response = UrlFetchApp.fetch(url,options);
  Logger.log(response);
}
...