【发布时间】:2021-12-08 11:07:30
【问题描述】:
我正在尝试从 url 中获取用户名和密码并将其重新组合在一起,以便以完整的形式再次使用它,但没有基本的身份验证部分。
我正在尝试类似下面的方法,但结果不是我所期望的。
from urllib.parse import urlsplit, urlunsplit
parts = urlsplit("http://user:pwd@host:8080/path?query=foo", allow_fragments=True)
auth = (parts.username, parts.password)
print(urlunsplit((parts.scheme, parts.hostname, str(parts.port), parts.path, parts.query)))
# http://host/8080?/path#query=foo
如果我可以在部件上将用户名和密码设置为 None 并调用 geturl 但我收到无法更改属性的错误,那就更好了。
from urllib.parse import urlsplit
parts = urlsplit("http://user:pwd@host:8080/path?query=foo", allow_fragments=True)
auth = (parts.username, parts.password)
parts.password = None
parts.username = None
print(parts.geturl())
# AttributeError: can't set attribute
注意,我想将用户名和密码保存在单独的元组中。
【问题讨论】:
-
根据文档
urlsplit返回一个namedtuple。您可以在元组中通过说part._replace(password=None, username=None)来replace fields,这将返回一个新的namedtuple(因为part是不可变的)。 -
您是否考虑过使用
re。示例:tuple(re.search("\/.*?\@", my_url).group(0)[2:-1].split(":")) -
我已经试过了,它已经说了未知的论点。我想了一分钟把它包括在内,但由于它是一个 private 方法,我认为无论如何我们都不应该实际使用它。
ValueError: Got unexpected field names: ['password', 'username']
标签: python