2016-12-19 2 views
0

Я пытаюсь использовать листы Google для отправки запроса POST с использованием urlFetchApp.POST-запросы не заполнены в скрипте Google

Я написал код ниже, но могу заставить его работать. Каждый раз, когда я запускаю этот скрипт, у меня есть следующая ошибка - «код»: 400, «сообщение»: «Неверный запрос: неполный запрос токена». Который я не понимаю, потому что, когда я запускаю тот же запрос от POSTMAN, у меня есть успешный ответ. В flied id клиента у меня есть специальный символ, например «/» и «+», а в client_secret «!», Может быть, он исходит оттуда?

Благодарим за помощь!

---- GSheets сценарий -----

function DX_API_request() { 
    var payload = { 
    'grant_type': 'client_credentials', 
    'client_id': 'name/[email protected]', 
    'client_secret': 'XXX!' 
    }; 
    var options = { 
    'method' : 'POST', 
    'Accept': 'application/json', 
    'payload' : JSON.stringify(payload), 
    'muteHttpExceptions': true 
    }; 
    Logger.log(JSON.stringify(payload)); 
    var test = UrlFetchApp.getRequest('https ://dx-example.com/admin/v100/api/oauth/token', options); 
    Logger.log(test); 
    var resquest_bearer = UrlFetchApp.fetch('https ://dx-example.com/admin/v100/api/oauth/token',options); 
    Logger.log(resquest_bearer); 
    var dataAll = JSON.parse(resquest_bearer.getContentText()); 
    Logger.log(dataAll.message); 
} 

----- Curl команда в Почтальон -------

curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -H "Cache-Control: no-cache" -H "Postman-Token: 655d9932-4681-f23d-6caf-5fcf63c10b82" -d 'grant_type=client_credentials&client_id=name/[email protected]&client_secret=XXX!' "https ://example.com/admin/v100/api/oauth/token" 

ответ

0

Вы не делая тот же запрос в скрипте Google Apps как команда curl.

В просьбе, с загнутым вы устанавливаете тип контента, как application/x-www-form-urlencoded, а также установить два дополнительных заголовков: Cache-Control: no-cachePostman-Token: 655d9932-4681-f23d-6caf-5fcf63c10b82

Тот же запрос в Google скрипт будет что-то вроде:

var payload = { 
    'grant_type': 'client_credentials', 
    'client_id': 'name/[email protected]', 
    'client_secret': 'XXX!' 
}; 
var options = { 
    'method': 'post', 
    'payload': payload, 
    'headers': { 
     "Cache-Control": 'no-cache', 
     "Postman-Token": '655d9932-4681-f23d-6caf-5fcf63c10b82' 
    } 
}; 
var test = UrlFetchApp.getRequest('https://dx-example.com/admin/v100/api/oauth/token', options); 
Logger.log(test); 

основная проблема, вероятно, в том, что в вашем скрипте размещаются данные как application/json, а не application/x-www-form-urlencoded. Больше информации здесь: https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app

Смежные вопросы