1

ログ記録のために 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

したがって、代替手段はthisのようですが、これはやり過ぎのようです。

標準ライブラリを使用してパスワードを置き換える簡単な方法はありますか?

4

1 に答える 1

5

urlparsetuple という名前の (のサブクラス) を返します。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

デモ:

>>> replace_password('https://user:pass@66.66.66.66/aaa/bbb')
'https://user:xxx@66.66.66.66/aaa/bbb'
于 2016-12-08T10:24:16.247 に答える