我正在尝试创建一个 Strava webhook 订阅,以接收来自已授权我的 Strava 应用程序的用户的事件。我能够使用本 Strava 教程中的代码成功创建订阅。但是,我不懂 Javascript,所以无法根据我的需要调整代码。因此,我尝试使用 Django 在 Python 中复制它的功能。
我的基本方法是遵循本网页Django 部分中概述的设置,然后将文件views.py
中的代码替换为以下代码。我试图使代码功能与我上面链接的教程中的 Javascript 函数尽可能相似。但是,我对 Web 应用程序非常陌生,因此在几个地方都采取了捷径/“在不了解原因的情况下放弃了有效的方法”。
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.clickjacking import xframe_options_exempt
import json
@csrf_exempt
@xframe_options_exempt
def example(request):
if request.method == "GET":
verify_token = "STRAVA"
str_request = str(request)
try:
mode = str_request[str_request.find("hub.mode=") + 9 : len(str_request) - 2]
token = str_request[str_request.find("hub.verify_token=") + 17 : str_request.find("&hub.challenge")]
challenge = str_request[str_request.find("hub.challenge=") + 14 : str_request.find("&hub.mode")]
except:
return HttpResponse('Could not verify. Mode, token or challenge not valid.')
if (mode == 'subscribe' and token == verify_token):
resp = json.dumps({"hub.challenge":challenge},separators=(',', ':'))
return HttpResponse(resp, content_type='application/json; charset=utf-8')
else:
return HttpResponse('Could not verify mode or token.')
Strava 文档说回调 url 必须在 2 秒内以 json 字符串的状态和回显响应GET请求200
。hub.challenge
这个功能似乎做到了。然而,当我尝试创建一个等效于以下请求的 POST 请求时:
$ curl -X POST https://www.strava.com/api/v3/push_subscriptions \
-F client_id=[MY-CLIENT-ID] \
-F client_secret=[MY-CLIENT-SECRET] \
-F 'callback_url=http://[MY-IP-ADDRESS]:8000/webhooks/example/' \
-F 'verify_token=STRAVA'
我得到以下回复:
{
"message": "Bad Request",
"errors": [
{
"resource": "PushSubscription",
"field": "callback url",
"code": "not verifiable"
}
]
}
有谁知道可能出了什么问题?
PS如果我能做些什么来使这个例子更具可重复性,请告诉我。我不太了解这个领域,不知道我是否遗漏了一些重要信息!