gpt4 book ai didi

Python Flask 服务器收到 'code 400' 错误(从 Telegram-webhook 发送的 POST 请求)

转载 作者:行者123 更新时间:2023-12-03 16:25:00 25 4
gpt4 key购买 nike

语境

我目前正在关注 this tutorial . - Telegram Bot with Python Tutorial #3:创建 Bot 和 Webhook |项目

第一步

我已经使用以下 python 代码设置了一个 Flask 服务器:

from flask import Flask
from flask import request
from flask import Response
import json

app = Flask(__name__)


@app.route('/', methods=['POST', 'GET'])
def index():
if request.method == 'POST':

print(request)

message = request.json()

with open('telegram_request.json', 'w', encoding='utf-8') as filename:
json.dump(message, filename, ensure_ascii=False, indent=4)

# prevents telegram from spamming
return Response('Ok', status=200)
else:
return """
<h1> Flask Server </h1>
<h2> Up and running </h2>
"""


if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0', port=8443)

第二步

I端口转发端口 8443 在我的路由器中使服务器对外界可见(教程中的隧道步骤)。

域名“ myprivatedomain.com:8443 ”现在重定向/引用设置的flask服务器。

第三步

我设置了 Telegram-API webhook正确,从 Telegram 获取以下响应代码:

{"ok":true,"result":true,"description":"Webhook was set"}



现在

之前 在电报聊天中发送消息:没有错误。

在聊天中发送消息,弹出以下错误:

code 400, message Bad HTTP/0.9 request type ('RANDOM BYTE VALUES like \x00\x03')

code 400, message Bad request syntax ('RANDOM BYTE VALUES like \x00\x03')

code 400, message Bad request version ('RANDOM BYTE VALUES like \x00\x03')



我想要的是

根据教程,您可以在 Telegram 发出 POST 请求时编写一个 .json 文件(参见示例: here )。我想保存 Telegram webhook 提供的消息对象(如教程视频中所示)。使用 webhook 获取更新比不断查询 getUpdates() 方法要好;该方法也返回旧消息。

我的尝试

我试图添加:
ssl_context='adhoc'


app.run(debug=True, host='0.0.0.0', port=8443)

建立连接HTTPS。

使用此 ssl_context 时,也无法加载主页..

优选输出

当用户在 Telegram 聊天中发送消息时 --> Python 会保存消息对象的 .json 文件。

最佳答案

您需要启用 SSL 才能使其正常工作。 Telegram 正在尝试与您的服务器启动 SSL session ,但您没有启用 SSL,因此您看到了错误的请求。
ssl_context='adhoc'可能适用于测试应用程序,但我也有一种预感,电报需要 有效 SSL 证书,而不仅仅是临时(或自签名)证书。请注意视频中 URL 左侧的锁,并且没有安全警告,该警告会与无效或自签名证书一起出现。

要确保 SSL 正常工作,请设置 ssl_contextadhoc ,启动应用程序,然后浏览到 https://myprivatedomain.com:8443/index .如果您可以浏览到它,那么在获得有效证书后,Telegram 也将能够浏览到它。

接下来,要获得有效(且免费)的 SSL 证书,您可以使用 LetsEncrypt .

一旦您拥有有效的 SSL 证书和 key 文件,您就可以通过 ssl_context论据 app.run带有证书文件路径和 key 文件路径的元组("/path/to/fullchain.pem", "/path/to/privkey.pem")
您的完整运行功能应如下所示

app.run(debug=True, host='0.0.0.0', port=8443, ssl_context=("/path/to/fullchain.pem", "/path/to/privkey.pem"))

或者,您可以使用 Apache 或 Nginx 通过 SSL 保护您的站点,并反向代理到您的机器人。这些选项通常会用在最终产品中,所以我理解你现在是否不想与它们纠缠不清,但无论如何这是一个很好的做法。

希望这有帮助。

关于Python Flask 服务器收到 'code 400' 错误(从 Telegram-webhook 发送的 POST 请求),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59383792/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com