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

Python urlparse处理密码含=?的URL时报错,是字符非法还是实现问题?

问题原因说明

这个问题是Python 3.7及更早版本中urllib.parse.urlparse的实现缺陷,不是基础认证密码不允许使用=?字符。

根因分析

  • RFC 3986规范中明确允许用户信息(即user:pass部分)包含:、=、?等子分隔符,只要这些字符出现在@符号之前,就属于认证信息段的内容,不应该被误解析为主机/端口段的内容。
  • 你遇到的报错是因为旧版本的urlparse对@的边界解析逻辑出错:当密码中出现?字符时,解析器错误地提前终止了用户信息段的识别,把?@1.2.3.4:123中的:后的内容当成了端口,才会尝试把=转成整数触发报错。

解决方案

  • 优先升级到Python 3.8及以上版本,该版本已经修复了这个解析bug,测试代码如下:
from urllib.parse import urlparse
print(urlparse("https://a:=?@1.2.3.4:123").port)
# 3.8+版本正确输出123
  • 如果必须使用3.7及更低版本,可以先对URL的用户信息段做URL编码处理,解析后再解码即可避免该问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:36:03