API приложения Google с ошибкой API Freshdesk

При использовании API-интерфейса freshdesk из приложения Google выдается ошибка

"{"code":"invalid_content_type","message":"Content-Type header is set to . It should be set to application/json"}"

Код, используемый для этого

function hd_getTickets(){//using v2
    var API_KEY = 'xxxxxxxxxxxxxx';
    var headers = {'Content-type': 'application/json','Authorization': 'Basic ' + Utilities.base64Encode(API_KEY + ':X')    };
    var data = {  "query":"\"priority:3\"" };
    var ENDPOINT = 'https://xxxxxxx.freshdesk.com/api/v2'; 
    var url = ENDPOINT + '/search/tickets';  
    var options = {      'method': 'get', muteHttpExceptions: true,'headers': headers,'payload' : JSON.stringify(data)};
    var response = UrlFetchApp.fetch(url, options);
}

Изменение конечной точки и удаление полезных данных из опций работают, поэтому при условии, что авторизация и заголовок в порядке

var url = ENDPOINT + '/tickets';  
var options = {'method':'get','headers':headers, muteHttpExceptions: true};

С помощью почтальона это работает

https://xxxxxxx.freshdesk.com/api/v2/search/tickets?query="priority:3"

с заголовком, установленным как

Content-Type:application/json
Authorization:Basic xxxxxxxxxxxxxxxx

2 ответа

Решение

Обнаружено две проблемы: 1) веб-сайт не поддерживает получение на основе полезной нагрузки. 2) приложения Google не поддерживают специальные символы в URL.

Добавление параметров к исходному URL и кодирование двойных кавычек работает.

  var ENDPOINT = 'https://xxxxxx.freshdesk.com/api/v2';   
  var query ='query='+encodeURIComponent("\"priority")+":1"+encodeURIComponent("\"");
  var url = ENDPOINT + '/search/tickets?'+query;  
  var options = {'method': 'get', muteHttpExceptions: true,'headers': headers}; 
  var response = UrlFetchApp.fetch(url, options);

Вы отправляете запрос GET к API с переменной Payload в опциях. На мой взгляд, полезные нагрузки используются для запросов POST.

Создайте URL с параметрами запроса и отправьте его без полезной нагрузки. Пример: ' https://domain.freshdesk.com/api/v2/search/tickets?query="priority: 3"'

Подробности см. Здесь: HTTP GET с телом запроса. Документ API Freshdesk: https://developers.freshdesk.com/api/

Другие вопросы по тегам