如何 POST JSON 到带有 DEV Link 的 Google Apps 脚本
How to POST JSON to a Google Apps Script with DEV Link
我有一个 Google Apps 脚本项目,我需要通过 GET 和 POST 方法接收一些请求。使用 GET 方法一切顺利,因为我可以在浏览器中通过 URL 模拟它;问题出在 POST 方法中,我无法通过 CURL 执行此操作,它显示 Google 权限错误。
这是我的代码
function doPost(e) {
let response = ContentService.createTextOutput()
response.setContent(JSON.stringify({
response: e
}))
response.setMimeType(ContentService.MimeType.JSON)
return response
}
function foo()
{
var url = "https://script.google.com/macros/s/id/dev";
var headers = {"Authorization": "Bearer " + ScriptApp.getOAuthToken()};
var payload = {
debug: 'data ok'
}
var params =
{
"method": "post",
"contentType": "application/json",
"headers": headers,
"payload": JSON.stringify(payload),
"muteHttpExceptions": true
};
var response = UrlFetchApp.fetch(url, params).getResponseCode()
Logger.log(response);
}
我需要使用 https://script.google.com/macros/s/id/**dev** link 进行调试。目的不是每次测试都生成一个版本。
在 current state 中,Test Deployments
仅供对脚本具有编辑权限的用户访问。这意味着您需要登录才能访问此部署,并且您不能通过 cURL 请求来执行此操作,除非您有必要的 cookie 来执行此操作。
解决方法如下:
- 打开
Google Developer Tools > Network Tab
。
- 转到您拥有测试部署的页面,
/dev/
端点。
- 在名为
dev
的请求中,单击第二个按钮并转到 Copy > Copy as cURL
。这将使用所有必要的 cookie 复制请求。
- 在终端中,通过添加
-X POST
来发出请求。
响应包含所需页面的 HTML。
文档
我相信你的目标如下。
- 您想使用 curl 命令通过
https://script.google.com/macros/s/###/dev
请求您的 Web 应用程序。
在这种情况下,下面的 curl 命令怎么样?
curl 命令示例:
当你的payload被使用时,变成如下
curl -L \
-d '{"debug": "data ok"}' \
-H "Authorization: Bearer ###your access token###" \
-H "Content-Type: application/json" \
"https://script.google.com/macros/s/###/dev"
为了访问https://script.google.com/macros/s/###/dev
,需要在请求头中包含访问令牌。并且作为一个范围,它需要用于 Drive API。例如,它是 https://www.googleapis.com/auth/drive.readonly
.
如果您想对此进行测试,可以使用以下 Google Apps 脚本示例脚本检索访问令牌。您可以将此访问令牌与上述 curl 命令一起使用。
function getAccesstoken() {
console.log(ScriptApp.getOAuthToken())
// DriveApp.getFiles(); // This is used for automatically detecting the scope of `https://www.googleapis.com/auth/drive.readonly`.
}
这样的话,doPost(e)
的e
如下
{"contextPath":"","parameter":{},"postData":{"contents":"{\"debug\": \"data ok\"}","length":20,"name":"postData","type":"application/json"},"contentLength":20,"queryString":"","parameters":{}}
参考:
我有一个 Google Apps 脚本项目,我需要通过 GET 和 POST 方法接收一些请求。使用 GET 方法一切顺利,因为我可以在浏览器中通过 URL 模拟它;问题出在 POST 方法中,我无法通过 CURL 执行此操作,它显示 Google 权限错误。
这是我的代码
function doPost(e) {
let response = ContentService.createTextOutput()
response.setContent(JSON.stringify({
response: e
}))
response.setMimeType(ContentService.MimeType.JSON)
return response
}
function foo()
{
var url = "https://script.google.com/macros/s/id/dev";
var headers = {"Authorization": "Bearer " + ScriptApp.getOAuthToken()};
var payload = {
debug: 'data ok'
}
var params =
{
"method": "post",
"contentType": "application/json",
"headers": headers,
"payload": JSON.stringify(payload),
"muteHttpExceptions": true
};
var response = UrlFetchApp.fetch(url, params).getResponseCode()
Logger.log(response);
}
我需要使用 https://script.google.com/macros/s/id/**dev** link 进行调试。目的不是每次测试都生成一个版本。
在 current state 中,Test Deployments
仅供对脚本具有编辑权限的用户访问。这意味着您需要登录才能访问此部署,并且您不能通过 cURL 请求来执行此操作,除非您有必要的 cookie 来执行此操作。
解决方法如下:
- 打开
Google Developer Tools > Network Tab
。 - 转到您拥有测试部署的页面,
/dev/
端点。 - 在名为
dev
的请求中,单击第二个按钮并转到Copy > Copy as cURL
。这将使用所有必要的 cookie 复制请求。 - 在终端中,通过添加
-X POST
来发出请求。
响应包含所需页面的 HTML。
文档
我相信你的目标如下。
- 您想使用 curl 命令通过
https://script.google.com/macros/s/###/dev
请求您的 Web 应用程序。
在这种情况下,下面的 curl 命令怎么样?
curl 命令示例:
当你的payload被使用时,变成如下
curl -L \
-d '{"debug": "data ok"}' \
-H "Authorization: Bearer ###your access token###" \
-H "Content-Type: application/json" \
"https://script.google.com/macros/s/###/dev"
为了访问
https://script.google.com/macros/s/###/dev
,需要在请求头中包含访问令牌。并且作为一个范围,它需要用于 Drive API。例如,它是https://www.googleapis.com/auth/drive.readonly
.如果您想对此进行测试,可以使用以下 Google Apps 脚本示例脚本检索访问令牌。您可以将此访问令牌与上述 curl 命令一起使用。
function getAccesstoken() { console.log(ScriptApp.getOAuthToken()) // DriveApp.getFiles(); // This is used for automatically detecting the scope of `https://www.googleapis.com/auth/drive.readonly`. }
这样的话,
doPost(e)
的e
如下{"contextPath":"","parameter":{},"postData":{"contents":"{\"debug\": \"data ok\"}","length":20,"name":"postData","type":"application/json"},"contentLength":20,"queryString":"","parameters":{}}