You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Telegram Bot发送含&字符的URL被截断,求解决方法

解决Telegram Bot发送带&的URL被截断的问题

我太懂这个坑了——手动把&换成&还是没解决截断问题,核心原因是你直接拼接URL参数的方式踩了HTTP协议的坑,你的URL里的&会被当成Telegram API请求的参数分隔符,导致API只接收到第一个&之前的内容。

问题到底出在哪?

当你手动拼接GET请求URL时,哪怕把movieSearch里的&换成&,在HTTP层面,&依然是用来分隔API参数(比如chat_id=、text=、parse_mode=)的符号。举个例子,你拼接后的URL大概是这样:

https://api.telegram.org/xxx/sendMessage?chat_id=xxx&text=https://xxx?release_date=xxx&user_rating=xxx&parse_mode=HTML

这时候HTTP会把这个URL解析成多个参数:

  • chat_id=xxx
  • text=https://xxx?release_date=xxx
  • amp;user_rating=xxx(被当成了一个无效的API参数)
  • parse_mode=HTML

所以text参数的值直接被截断到第一个&之前,这就是你看到的发送内容不完整的原因。

正确的解决方法:让requests自动处理参数编码

别再手动拼接URL了,用requests.get的params参数来传递所有API参数,它会自动帮你把特殊字符(比如&)编码成%26,彻底避免参数分隔符冲突的问题。

修改后的代码如下:

1. 定义movieSearch时不用手动转义&

# 用f-string更清晰,直接保留原始的&即可
movieSearch = f"https://www.imdb.com/search/title?release_date={year}-01-01,2018-12-31&user_rating={score},&genres={genres}"

2. 用params参数传递Telegram API的所有参数

import requests

# 基础URL只保留API端点
base_url = f"https://api.telegram.org/{botID}/sendMessage"

# 把所有参数放进字典里
api_params = {
    "chat_id": chatid,
    "text": movieSearch,
    "parse_mode": "HTML"
}

# 让requests自动处理编码和拼接
response = requests.get(base_url, params=api_params)

这样处理后,requests会自动把movieSearch里的&转成%26,Telegram API收到完整的text参数后,因为你设置了parse_mode=HTML,会把%26转回&,最终发送的URL就是完整无截断的。

为什么之前的尝试没用?

  • 手动替换&为&:本质上还是在URL里保留了&,依然会被当成参数分隔符,导致text被提前截断。
  • 移除parse_mode=HTML:问题根源是URL参数的分隔冲突,和HTML解析无关,所以自然解决不了。

内容的提问来源于stack exchange,提问作者KMFR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:07:10