If I have a URL (ex: "ssh://[email protected]:553/random_uri", "https://test.blah.blah:993/random_uri2"), I want to set/update the username in the url. I know there is urllib.parse.urlparse (https://docs.python.org/3/library/urllib.parse.html) that would break them down but I am having trouble creating a new url (or updating) the parsed result with the username I intend to use.
Is there any python library that can help set/update username? Preferably using the parsed result of an urlparse.
Python urllib.parse does not have a nice method to set/edit or remove username/password from URLs.
However, you can use the netloc attribute. See the example function below.
from urllib.parse import urlparse, quote
def set_url_username_password(url, username, password):
_username = quote(username)
_password = quote(password)
_url = urlparse(url)
_netloc = _url.netloc.split('@')[-1]
_url = _url._replace(netloc=f'{_username}:{_password}@{_netloc}')
return _url.geturl()
original_url = 'https://google.com'
username = 'username'
password = 'pa$$word'
new_url = set_url_username_password(original_url, username, password)
new_url will be set to https://username:pa%24%[email protected].
Note that this function replaces any existing credentials with the new ones.
Here is a bonus function to remove credentials from an URL:
from urllib.parse import urlparse
def unset_url_username_password(url):
_url = urlparse(url)
_netloc = _url.netloc.split('@')[-1]
_url = _url._replace(netloc=_netloc)
return _url.geturl()
Let me to show a script without 3rd package.
from urllib.parse import urlparse
old_url = "https://user:[email protected]"
user="user-01"
password="my-secure-password"
_url = urlparse(old_url)
domain = _url.netloc.split("@")[-1]
new_url = "{}://{}:{}@{}".format(_url.scheme, user,password, domain)
Run the script, the variable new_url contains your url with new user and password.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With