[英]Fetch JSON object from Google WebApp from another Google WebApp
我有兩個Google Spreadsheets,每個都有附加的Apps腳本。 最終,我希望將兩者都部署為WebApp,以便它們可以通過其公共URL相互通信。 目前,我僅部署了其中一個,因此可以測試此功能。
我們將腳本A稱為部署為WebApp的腳本,將腳本B稱為嘗試向腳本A的URL發送請求的腳本。 此處的目標是腳本A將JSON對象返回到腳本B。
在腳本A中,我有以下代碼:
function doGet(request) {
var data = [[1, 2, 3], [4, 5, 6]]; //dummy JSON object
return ContentService.createTextOutput(JSON.stringify(data))
.setMimeType(ContentService.MimeType.JSON);
}
在腳本B中,我有以下代碼:
function pullJSON(URL) {
var data = UrlFetchApp.fetch(URL, {"contentType": "application/json"});
Logger.log(data);
}
當我訪問腳本A的exec URL時,我得到一個JSON對象。 但是,當我在腳本B中運行pullJSON() (向其提供相同的URL)時,記錄器會顯示一個長的HTML文件,其中填充了元數據(當我在瀏覽器中查看該文件時,沒有可見的內容)。 我對為什么會這樣感到困惑...我知道有幾個重定向返回JSON,但是據我了解, UrlFetchApp.fetch()方法默認遵循所有重定向。
這可能是OAuth問題嗎? 腳本A已發布為以用戶訪問應用程序的身份運行,盡管我也嘗試過以我的身份運行它。
思考?
當您將腳本部署為網絡應用程序以作為服務運行時,您只能使用.exec url並使用urlFetch進行調用,因為開發url(以.dev結尾的那個)只能由您訪問,並且請求並非來自您,但來自Google。
我部署了您的示例,並使用您的代碼對其進行了測試,如下所示:
function pullJSON(URL) {
var URL = "https://script.google.com/macros/s/AKfycbzqRgv1XfUUrAimvD31OXx89GdhjeBd45SBODaq1c7bkGVusio/exec"
var data = UrlFetchApp.fetch(URL, {"contentType": "application/json"});
Logger.log(data);
}
結果是預期的:
您可以自行測試它,因為該應用程序以“像我一樣運行”的方式部署,並且任何人都可以訪問,甚至可以匿名訪問。
如果要限制其訪問,則必須在URL中添加一些參數,並在服務器Web應用程序中處理這些參數以檢查請求的來源。
像這樣簡單地將參數添加到url中:
var data = UrlFetchApp.fetch(URL+"?user=serge&secret=secretcode", {"contentType": "application/json"});
然后在您的服務器腳本中像這樣檢查它:
var user = request.parameter.user;
var secret = request.parameter.secret;
然后您將獲得用戶和秘密。
編輯:這是帶有安全控制的兩個腳本的完整示例:
webapp:
function doGet(e) {
var data = [[1, 2, 3], [4, 5, 6]]; //dummy JSON object
if(e.parameter.user=='serge'&&e.parameter.secret=='secretcode'){
return ContentService.createTextOutput(JSON.stringify(data))
.setMimeType(ContentService.MimeType.JSON);
}else{
return ContentService.createTextOutput('You are not allowed to get this result, user should be '+e.parameter.user+' and code should be '+e.parameter.secret)
.setMimeType(ContentService.MimeType.TEXT);
}
}
和測試腳本:
function pullJSONSecure() {
var URL = "https://script.google.com/macros/s/AKfycbyzoFbcjTXMCALTOlscwAZP6gY1mWc1mkbWb84LYO-qeQk16xw/exec"
var data = UrlFetchApp.fetch(URL+"?user=serge&secret=secretcode", {"contentType": "application/json"});
Logger.log(data);
}
如果嘗試使用此腳本並更改用戶名或密碼,將看到發生的情況。
編輯2:部署參數:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.