Python Telegram Bot代理:Basic Auth含特殊字符的密码如何转义?
解决Python Telegram Bot代理Basic Auth特殊字符解析失败问题
当代理密码包含#、=、逗号这类特殊字符时,直接将其写入proxy_url会导致URL解析错误——因为这些字符属于URL的保留字符,会被误判为URL结构的一部分(比如#会被识别为锚点起始符)。
解决方案1:手动URL编码用户名/密码
使用Python内置的urllib.parse.quote函数,对用户名和密码分别进行URL编码,再拼接成合法的代理URL:
from urllib.parse import quote # 原始认证信息 username = "TechLogin" new_password = "-th#kr123=,1" # 编码特殊字符 encoded_username = quote(username) encoded_password = quote(new_password) # 构建合法的代理URL proxy_url = f"https://{encoded_username}:{encoded_password}@192.168.111.38:5050/" REQUEST_KWARGS = { "proxy_url": proxy_url } updater = Updater(token=my_bot_token, request_kwargs=REQUEST_KWARGS)
编码后,特殊字符会被转换成URL安全的格式(比如#→%23,=→%3D,逗号→%2C),避免解析错误。
解决方案2:单独设置auth参数(推荐)
直接在request_kwargs中拆分代理地址和认证信息,将用户名密码放在auth字段里。requests库会自动处理特殊字符的编码,无需手动操作:
REQUEST_KWARGS = { "proxy_url": "https://192.168.111.38:5050/", "auth": ("TechLogin", "-th#kr123=,1") } updater = Updater(token=my_bot_token, request_kwargs=REQUEST_KWARGS)
这种方式更简洁可靠,减少手动编码可能出现的错误。
内容的提问来源于stack exchange,提问作者Mikhail_Sam
相关产品推荐
相关产品推荐

