Python 混淆url中的密码

Python 混淆url中的密码,python,logging,obfuscation,urlparse,Python,Logging,Obfuscation,Urlparse,我想隐藏URL中的密码以用于日志记录。我希望通过解析,将密码替换为伪密码,并进行解析,但这给了我: >>> 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 "<

我想隐藏URL中的密码以用于日志记录。我希望通过解析,将密码替换为伪密码,并进行解析,但这给了我:

>>> 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
>>从urllib.parse导入urlparse
>>>parts=urlparse('https://user:pass@66.66.66.66/aaa/bbb')
>>>parts.password='xxx'
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
AttributeError:无法设置属性
因此,另一种选择似乎是,这似乎是矫枉过正


有没有更简单的方法可以使用标准库替换密码?

urlparse
返回一个名为tuple的(子类)。使用生成一个新副本,并在该副本上使用
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
演示:


urlparse
返回一个名为tuple的(子类)。使用生成一个新副本,并在该副本上使用
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
演示:



这里的
部分是什么?@AKS:对不起,我以为已经很清楚了。添加了更多上下文。@janbrohl:这正是链接脚本所做的,我认为最好的方法之一是编写一个日志处理程序,在创建日志的过程中混淆密码。对于一个更简单的解决方案,你不能直接替换字符串,通过获取类似以下内容来替换它吗
零件
在这里?@AKS:对不起,我以为已经清楚了。添加了更多上下文。@janbrohl:这正是链接脚本所做的,我认为最好的方法之一是编写一个日志处理程序,在创建日志的过程中混淆密码。为了更简单的解决方案,你不能直接替换字符串,获得类似以下内容的内容并替换它吗?太好了!让我测试一下。@delavnog:轻微问题:没有密码字段;我将使用正确的字段进行更新。为什么不只检查
parts.password是否为None
?@warvariuc:因为我忘记了该属性;-)好的,这是一个很好的中间地带:一些自定义的解析,但似乎是无害的。没有最初的替换密码的想法那么好,但我想URLPASE/URLUNBASE不允许这样做。谢谢那太好了!让我测试一下。@delavnog:轻微问题:没有密码字段;我将使用正确的字段进行更新。为什么不只检查
parts.password是否为None
?@warvariuc:因为我忘记了该属性;-)好的,这是一个很好的中间地带:一些自定义的解析,但似乎是无害的。没有最初的替换密码的想法那么好,但我想URLPASE/URLUNBASE不允许这样做。谢谢