2016-12-19 68 views
0

我想從谷歌工作表使用urlFetchApp發送POST請求。谷歌腳本POST請求不完整

我寫了下面的代碼,但可以使它工作。每次運行這個腳本時,我都會遇到以下錯誤 - 「code」:400,「message」:「錯誤的請求:不完整的令牌請求」。我不明白,因爲當我從POSTMAN運行同樣的請求時,我有一個成功的答案。在客戶端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

你是不是使谷歌應用腳​​本中的相同請求與curl命令相同。

與捲髮讓你在設置內容類型爲application/x-www-form-urlencoded還要求設置兩個額外的頭:Cache-Control: no-cachePostman-Token: 655d9932-4681-f23d-6caf-5fcf63c10b82

在谷歌的腳本了同樣的要求會是這樣的:

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