Javascript 如何使用;执行官;url而不是“url”;发展";网址。Exec返回403错误
一直在尝试在GoogleSheets应用程序脚本中设置一个webhook,当Trello中发生更改时,该脚本将做出响应。为此,建议将脚本部署为web应用程序(需要返回HTML的Javascript 如何使用;执行官;url而不是“url”;发展";网址。Exec返回403错误,javascript,google-apps-script,google-sheets,webhooks,trello,Javascript,Google Apps Script,Google Sheets,Webhooks,Trello,一直在尝试在GoogleSheets应用程序脚本中设置一个webhook,当Trello中发生更改时,该脚本将做出响应。为此,建议将脚本部署为web应用程序(需要返回HTML的doGet和doPost函数),以创建用于接收post和get请求的URL目的地 web应用程序生成两个URL,一个以/dev结尾,用于开发目的(不响应post请求),另一个以/exec结尾,用于正常访问 我已经部署了web应用程序,这两个URL都可以在我的浏览器中访问和响应(可以在不登录的情况下以匿名方式查看exec),
doGet
和doPost
函数),以创建用于接收post
和get
请求的URL目的地
web应用程序生成两个URL,一个以/dev
结尾,用于开发目的(不响应post
请求),另一个以/exec
结尾,用于正常访问
我已经部署了web应用程序,这两个URL都可以在我的浏览器中访问和响应(可以在不登录的情况下以匿名方式查看exec),应用程序被发布为“我”执行,“任何人,甚至匿名”都可以访问
我已经能够成功地使用下面的代码为/dev
URL创建web钩子,但没有为/exec
URL创建web钩子
function create() {
var url = 'https://api.trello.com/1/tokens/ae6ebe60b45abcd2d4aa945c9ab4c4571bd6b6f7856b1df0cd387fbffc649579/webhooks/?key=a211f4aca7fb3e521d652730dd231cb6'
var payload = {
"key": "xxxxxxxxxxx",
"token" : "xxxxxxxxxxxxx",
"callbackURL": "https://script.google.com/macros/s/AKfycbw51TYGWHe95hKdcAs4l7E2eg0AtBi8e48lf_iafKYI/dev",
"idModel":"xxxxxxxx",
"description": "GW Test"
}
var options = {"method" : "post",
"payload" : payload,
"muteHttpExceptions": true
};
var response = UrlFetchApp.fetch(url,options);
}
使用/dev
URL时,我可以看到在我的Trello中添加了一个新的web钩子,但是/exec
URL返回以下错误:
{“message”:“URL()未返回200状态码,获取403”,“error”:“error”}
因此Trello希望返回一个“200状态码”来验证脚本是否正常运行,但收到的却是403。让我困惑的是,为什么在使用/dev
时不会发生这种情况?如何让它接受我的/exec
URL
更多信息:
当我直接在浏览器中使用或加载URL时,我可以让我的代码响应
put
和get
请求。它通过填充电子表格中的前六(6)个单元格进行响应
我已经重新发布了一个新版本,并验证了代码仍然有效,但我仍然从Trello那里收到错误消息,说他们收到的是403而不是200代码。我只在使用/exec
而不是/dev
时收到此错误。而且由于/dev
无法接收post
请求,因此它不会有任何帮助:(
下面是一个示例的剩余部分:
function doSomething() {
var values = [11,12];
SpreadsheetApp.getActiveSheet().getRange("A1:B1").setValue(values);
}
function create() {
var url = 'https://api.trello.com/1/tokens/ae6ebe60b45abcd2d4aa945c9ab4c4571bd6b6f7856b1df0cd387fbffc649579/webhooks/?key=a211f4aca7fb3e521d652730dd231cb6'
var payload = {
"key": "xxxxxxxxxxxxxxxxxx",
"token" : "xxxxxxxxxxxxxxxxxxx": "https://script.google.com/macros/s/AKfycbw51TYGWHe95hKdcAs4l7E2eg0AtBi8e48lf_iafKYI/dev",
"idModel":"xxxxxxxxxxxxxxxxxxxxxxxx",
"description": "GW Test"
}
var options = {"method" : "delete",
"payload" : payload,
// "muteHttpExceptions": true
};
var response = UrlFetchApp.fetch(url,options); // creates webhook
}
// function that fires when the webapp receives a GET request
function doGet(e) {
doSomething();
var values = [21,22];
SpreadsheetApp.getActiveSheet().getRange("A2:B2").setValue(values);
return HtmlService.createHtmlOutput("something Get-ed");
}
function doPost(e) {
doSomething();
var values = [31,32];
SpreadsheetApp.getActiveSheet().getRange("A3:B3").setValue(values);
return ContentService.createTextOutput("something Posted");
//var params = JSON.stringify(e);
}
这个答案怎么样
问题:
根据您的问题,API返回了以下错误
{“message”:“URL()未返回200状态码,获取403”,“error”:“error”}
关于上述错误的原因,起初我认为最新的脚本可能不会反映到Web应用程序中。但从您的回复评论中,发现最新的脚本会反映到Web应用程序中。在这种情况下,我尝试从部署的Web应用程序中检索403
的错误
准备:
作为准备工作,Web应用程序分别以“作为执行应用程序”和“谁有权访问应用程序”作为Me
和任何人(甚至匿名)部署。Web应用程序的示例脚本如下所示
function doGet(e) {return ContentService.createTextOutput("GET: Done.")}
function myFunction() {
var url_exec = "https://script.google.com/macros/s/###/exec";
var url_dev = "https://script.google.com/macros/s/###/dev";
var res = UrlFetchApp.fetchAll([{url: url_exec}, {url: url_dev}]);
res.forEach(function(e) {
Logger.log(e.getResponseCode());
});
}
实验:
使用Google应用程序脚本:
首先,我使用GoogleApps脚本检查状态代码,当它请求Web应用时
function doGet(e) {return ContentService.createTextOutput("GET: Done.")}
function myFunction() {
var url_exec = "https://script.google.com/macros/s/###/exec";
var url_dev = "https://script.google.com/macros/s/###/dev";
var res = UrlFetchApp.fetchAll([{url: url_exec}, {url: url_dev}]);
res.forEach(function(e) {
Logger.log(e.getResponseCode());
});
}
在这种情况下,为exec
和dev
的两个端点获取了200
的状态代码。使用Google Apps脚本,无法检索到403
的状态代码
使用Curl:
为了用curl检索状态代码,curl-s-o/dev/null-w“{http_-code}”http://www.example.org/使用了
。这是从。在这里,使用curl命令调查状态代码。因为curl可以通过如下所示的选项通过两种请求进行访问
:在输出中包括HTTP响应头。HTTP响应头可以包括服务器名称、cookies、文档日期、HTTP版本等内容
:(HTTP FTP文件)仅获取标题!HTTP服务器具有命令头,该命令头仅用于获取文档的标题。当用于FTP或文件时,curl仅显示文件大小和上次修改时间
使用上述选项,调查了以下4种模式
使用选项--include
请求exec
的端点。
curl-sL--include-o/dev/null-w“{http_-code}”https://script.google.com/macros/s/###/exec“
- 已返回
200
使用选项--include
请求dev
的端点。
curl-sL--include-o/dev/null-w“{http_-code}”https://script.google.com/macros/s/###/dev“
- 已返回
200
使用选项--head
请求exec
的端点。
curl-sL--head-o/dev/null-w“{http_-code}”https://script.google.com/macros/s/###/exec“
403
已返回。
使用选项--head
请求dev
的端点。
curl-sL--head-o/dev/null-w“{http_-code}”https://script.google.com/macros/s/###/dev“
- 已返回
200
结果发现,当使用选项--head
请求exec
端点的Web应用程序时,获得了403
的状态代码
结果和讨论:
当选项--head
用于curl命令时,从文档中,这意味着它只请求header而不请求body。由此,发现返回了403
的状态代码
这里,为什么当它请求dev
的端点时,-include
和-head
的两个选项都返回了200
的状态代码?我们认为这是因为返回了登录屏幕。当访问dev
的端点时,它是必需的