编辑 2 - 我现在已经对这个问题提供了我自己的答案 - 任何进一步的想法或意见仍将不胜感激
编辑 1 - 潜在的相关信息:
我在内容服务文档页面的底部找到了这个脚注,上面写着:
出于安全原因,内容服务返回的内容不是从 提供的
script.google.com
,而是重定向到位于 的一次性 URLscript.googleusercontent.com
。这意味着,如果您使用内容服务将数据返回到另一个应用程序,则必须确保将 HTTP 客户端配置为遵循重定向。例如,在 cURL 命令行实用程序中,添加标志 -L。有关如何启用此行为的更多信息,请查看您的 HTTP 客户端的文档。
这似乎是相关的,因为我正在使用 ContentService 为 Strava 的 GET 请求提供数据 - 这是否意味着它收到的响应来自不同的 URL,因此不是来自指定的回调 URL?
我一直在尝试使用 Google Apps 脚本创建一个对 Strava 的 webhook 订阅,我觉得我非常接近解决它,但我遇到了最后一个我似乎无法通过的障碍。
此处列出了用于创建对 Strava 的 webhook 订阅的文档,并且我已经到了向 Strava API 发出 POST 请求订阅的阶段。然后,Strava 向我指定的 callback_url 发送一个 HTTP GET 请求,其中包含一些参数——其中最重要的是hub.challenge
参数。这个参数必须在 2 秒内通过我的回调地址发回,以便验证链接。这是我有些悲伤的地方。
function doGet(e) {
var hubChal = e.parameter["hub.challenge"];
var result = {
"hub.challenge": hubChal
};
return ContentService.createTextOutput(JSON.stringify(result))
.setMimeType(ContentService.MimeType.JSON);
}
以上是我当前处理传入 GET 请求的函数。
在文档中它指出:
您的回调地址必须在两秒内响应来自 Strava 订阅服务的 GET 请求。响应应指示状态代码 200,并应将
hub.challenge
响应正文中的字段作为application/json
内容类型回显:{ “hub.challenge”:”15f7d1a91c1f40f8a748fd134752feb3” }
但是,当我将 POST 发送到 webhook 订阅 API 时,我会在 Postman 上收到以下响应:
{
"message": "Bad Request",
"errors": [
{
"resource": "PushSubscription",
"field": "callback url",
"code": "GET to callback URL does not return 200"
}
]
}
我检查了文档页面上提供的故障排除建议,其中的一个元素提供了一个示例 GET 请求,供您发送给自己,以查看您的回调地址提供的回报:
检查对上述请求的响应是否显示状态并在 JSON 正文中
200
正确回显。hub.challenge
上述示例 curl 请求的响应正文应如下所示{ “hub.challenge”:”15f7d1a91c1f40f8a748fd134752feb3” }
使用以下虚拟 GET 请求:
{your-callback-url}?hub.verify_token=test&hub.challenge=15f7d1a91c1f40f8a748fd134752feb3&hub.mode=subscribe
插入我的回调 url 并通过 Postman 发送 GET 请求会向我返回以下内容:
{
"hub.challenge": "15f7d1a91c1f40f8a748fd134752feb3"
}
除了显示 200 OK 状态代码外,还不到 2 秒。
我真的看不出我在这里做错了什么,因为我似乎满足了设置订阅的标准。值得一提的是,我对 Google Apps 脚本不是很熟悉,所以我完全有可能甚至很可能遗漏了一些基本的东西,但我一辈子都看不到它。
尽管昨天搜索了整个下午和晚上,我已经阅读了所有故障排除建议,但仍然无法在线找到答案。任何帮助将不胜感激 - 谢谢。