簡體   English   中英

使用基本身份驗證從 url 中刪除用戶名和密碼

[英]strip username and password from url with basic auth

我正在嘗試從 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

請注意,我想將用戶名和密碼保存在一個單獨的元組中。

urlunsplit需要一個看起來與urlsplit返回的相同的元組。 該元組中的第二個元素是netloc - 看起來像: user:pwd@host:port

所以你需要傳遞類似的東西。 你可以通過修改parts.netloc你從得到urlsplit和它傳遞給urlunsplit

from urllib.parse import urlsplit, urlunsplit

parts = urlsplit("http://user:pwd@host:8080/path?query=foo", allow_fragments=True)
auth = (parts.username, parts.password)

netloc = parts.netloc.split('@')[1]  # ignore the auth part. You should check the length after the split obviously
reconstruction_parts = (parts.scheme, netloc, parts.path, parts.query, parts.fragment)

print(urlunsplit(reconstruction_parts))

結果:

http://host:8080/path?query=foo

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM