Telegram机器人Webhook发送空POST请求问题排查(Django环境)
解决Telegram Webhook在Django中无法获取Payload的问题
我之前刚好踩过这个坑!你遇到的问题根本不是Telegram配置的问题,而是Telegram发送Webhook请求的格式和普通表单POST不一样——它是用JSON格式的请求体来传递数据,而Django的request.POST只会解析application/x-www-form-urlencoded或multipart/form-data类型的请求体,所以自然拿不到内容。
具体解决步骤:
不要用request.POST,直接读取请求体的原始内容并解析成JSON,修改后的代码如下:
import json from django.http import HttpResponse from django.views.decorators.csrf import csrf_exempt @csrf_exempt def webhook(request): print(request.get_full_path()) if request.method == 'POST': # 读取并解析Telegram发送的JSON payload try: payload = json.loads(request.body) print("Received Telegram payload:", payload) except json.JSONDecodeError: print("Invalid JSON payload received") return HttpResponse("OK")
额外验证小技巧:
你可以先打印一下请求的Content-Type,确认Telegram的请求格式:
print("Request Content-Type:", request.content_type)
正常情况下应该会输出application/json,这也能佐证我们的判断。
另外,你自己发送的POST请求应该是表单编码格式,所以request.POST能拿到数据,这和Telegram的请求不是一回事,所以之前的测试结果是正常的~
内容的提问来源于stack exchange,提问作者user1532587
相关产品推荐
相关产品推荐

