dan*_*ast 1 python obfuscation logging urlparse
我想隐藏 URL 中的密码以用于日志记录。我希望通过解析、用虚拟密码替换密码并解析来使用urlparse,但这给了我:
>>> from urllib.parse import urlparse
>>> parts = urlparse('https://user:pass@66.66.66.66/aaa/bbb')
>>> parts.password = 'xxx'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: can't set attribute
Run Code Online (Sandbox Code Playgroud)
所以替代方案似乎是这样,这似乎太过分了。
使用标准库是否有更简单的方法来替换密码?
urlparse返回一个名为 tuple 的(子类)。使用该namedtuple._replace()方法生成一个新副本,然后使用geturl()它来“解析”。
密码是netloc属性的一部分,可以进一步解析:
from urllib.parse import urlparse
def replace_password(url):
parts = urlparse(url)
if parts.password is not None:
# split out the host portion manually. We could use
# parts.hostname and parts.port, but then you'd have to check
# if either part is None. The hostname would also be lowercased.
host_info = parts.netloc.rpartition('@')[-1]
parts = parts._replace(netloc='{}:xxx@{}'.format(
parts.username, host_info))
url = parts.geturl()
return url
Run Code Online (Sandbox Code Playgroud)
演示:
>>> replace_password('https://user:pass@66.66.66.66/aaa/bbb')
'https://user:xxx@66.66.66.66/aaa/bbb'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
737 次 |
| 最近记录: |