URL 密码 (netloc) 中是否允许使用问号 (?)?
Are question marks (?) allowed in URL passwords (netloc)?
我 运行 我的代码中有一个错误,归结为 python 的 urllib.parse.urlparse 中的意外行为。当 URL 中的密码包含 ?
时,就会发生这种情况。我很不好意思称这是一个错误,因为我不能 100% 确定 URL 在语法上是正确的。例如:
https://user:pass?word@domain.name/path
我希望它解析为:
ParseResult(scheme='https', netloc='user:pass?word@domain.name', path='/path', params='', query='', fragment='')
但它实际上解析为:
ParseResult(scheme='https', netloc='user:pass', path='', params='', query='word@domain.name/path', fragment='')
这些URL正在别处自动格式化,需要支持在密码中使用?
。有趣的是,URLS 实际上是 sqlalchemy 连接字符串,sqlalchemy / psycopg2 都按预期解释它们。
问题
URL 密码 (netloc) 中是否允许使用问号 ?
? - 理想情况下,答案应参考适当的 RFC 措辞。
或者 python 的行为是否正确?
RFC 2396 中的第 3.2 节指定 ?
在权限组件中保留(这意味着您不允许在该组件中使用它而无需编码,请参阅 2.2)。授权组件 IIUC 是包含 HTTP 方案 URI(参见 3.2.2)的 user-name/password 的组件。
我 运行 我的代码中有一个错误,归结为 python 的 urllib.parse.urlparse 中的意外行为。当 URL 中的密码包含 ?
时,就会发生这种情况。我很不好意思称这是一个错误,因为我不能 100% 确定 URL 在语法上是正确的。例如:
https://user:pass?word@domain.name/path
我希望它解析为:
ParseResult(scheme='https', netloc='user:pass?word@domain.name', path='/path', params='', query='', fragment='')
但它实际上解析为:
ParseResult(scheme='https', netloc='user:pass', path='', params='', query='word@domain.name/path', fragment='')
这些URL正在别处自动格式化,需要支持在密码中使用?
。有趣的是,URLS 实际上是 sqlalchemy 连接字符串,sqlalchemy / psycopg2 都按预期解释它们。
问题
URL 密码 (netloc) 中是否允许使用问号 ?
? - 理想情况下,答案应参考适当的 RFC 措辞。
或者 python 的行为是否正确?
RFC 2396 中的第 3.2 节指定 ?
在权限组件中保留(这意味着您不允许在该组件中使用它而无需编码,请参阅 2.2)。授权组件 IIUC 是包含 HTTP 方案 URI(参见 3.2.2)的 user-name/password 的组件。