解析URL路径时python和ruby之间的不同,哪个有效?

Zou*_*ogi 1 ruby python url rfc3986

我有一个 URL 字符串:

url = "https://foo.bar.com/path/to/aaa.bbb/ccc.ddd;dc_trk_aid=486652617;tfua=;gdpr=;gdpr_consent=?&339286293"
Run Code Online (Sandbox Code Playgroud)

使用 Python 时

url = "https://foo.bar.com/path/to/aaa.bbb/ccc.ddd;dc_trk_aid=486652617;tfua=;gdpr=;gdpr_consent=?&339286293"
Run Code Online (Sandbox Code Playgroud)

使用红宝石时

from urllib.parse import urlparse

url_obj = urlparse(url)
url_obj.path  # `path/to/aaa.bbb/ccc.ddd`
Run Code Online (Sandbox Code Playgroud)

我猜python考虑;不是url路径的一部分,哪个是“正确的”?

Ama*_*dan 6

urlparsepath第一个分号后的部分为params

url_obj.path   # '/path/to/aaa.bbb/ccc.ddd'
url_obj.params # 'dc_trk_aid=486652617;tfua=;gdpr=;gdpr_consent='
Run Code Online (Sandbox Code Playgroud)

要复制 Ruby 的行为,请urlsplit改用:

这类似于urlparse(),但不会从 URL 中分离参数。urlparse()如果需要更新的 URL 语法,允许将参数应用于URL路径部分的每个段(请参阅 RFC 2396),通常应该使用它来代替。

from urllib.parse import urlsplit

url_obj = urlsplit(url)
url_obj.path  # '/path/to/aaa.bbb/ccc.ddd;dc_trk_aid=486652617;tfua=;gdpr=;gdpr_consent='
Run Code Online (Sandbox Code Playgroud)