Telegram API HTML解析模式下发送含#的URL锚点被截断如何解决
问题原因
你出现该问题的核心原因是手动拼接请求URL的写法错误:# 是HTTP协议标准中的URL片段标识符,当它直接出现在请求URL里时,会被HTTP客户端在发送请求前直接截断,不会传递到Telegram服务器,这和Telegram的HTML解析模式没有关系。
修复方案
不要手动拼接查询参数,直接使用requests库内置的参数传递逻辑,工具会自动对特殊字符做合规编码,不需要你手动转义#,修复后的代码示例如下:
import requests token = "替换为你的Bot Token" chat_id = "替换为目标聊天ID" # 注意:链接补全https://前缀,避免客户端识别异常 msg = "<a href='https://www.example.com/#/otherparams'>inline link example</a>" # 推荐:参数放在POST请求体中,避免URL长度限制和特殊字符截断问题 resp = requests.post( f"https://api.telegram.org/bot{token}/sendMessage", data = { "chat_id": chat_id, "parse_mode": "html", "text": msg } )
如果你习惯把参数放在查询字符串中,也可以用params参数传递,同样会自动处理编码:
resp = requests.post( f"https://api.telegram.org/bot{token}/sendMessage", params = { "chat_id": chat_id, "parse_mode": "html", "text": msg } )
内容的提问来源于stack exchange,提问作者Davide Davide
相关产品推荐
相关产品推荐

