在 Python 中构造一个 URI?



我正在尝试将Java程序转换为Python,我目前坚持的一件事是在Python中使用URI。 我在Python中找到了urllib.response,但我正在努力弄清楚如何使用它。

我试图用这个URI做的是获取用户信息(特别是用户名和密码(,主机和路径。 在Java中,有相关的方法(getUserInfo()getHost()getPath()(,但是即使在查找了urllib.responsePython文档之后,我也很难在Python中找到与此相关的方法。

Java 中的等效代码是:

URI dbUri = new URI(env);
username = dbUri.getUserInfo().split(":")[0];
password = dbUri.getUserInfo().split(":")[1];
dbUrl = "jdbc:postgresql://" + dbUri.getHost() + dbUri.getPath();   

以及可以使用哪些适当的方法将其转换为Python?

似乎你想使用像urllib.parse.urlparse这样的东西。

https://docs.python.org/3/library/urllib.parse.html#urllib.parse.urlparse

from urllib.parse import urlparse
db_url = urlparse(raw_url_string)
username = db_url.username
password = db_url.password
host = db_url.net_loc
path = db_url.path
...

您可能需要对此进行一些调整。urlparseurlsplit在参数方面存在细微差异。 然后,您可以使用其中一种urlunparseunsplit.

代码

from urllib import parse
from urllib.parse import urlsplit
url = 'http://localhost:5432/postgres?user=postgres&password=somePassword'
split_url = urlsplit(url)
hostname = split_url.netloc
path = split_url.path
params = dict(parse.parse_qsl(split_url.query))
username = params['user']
password = params['password']
db_url = "jdbc:postgresql://" + hostname + path
print(db_uri)
<小时 />

输出

jdbc:postgresql://localhost:5432/postgres

最新更新