解析URL路径时python和ruby之间的不同,哪个有效?
我有一个 URL 字符串:
url = "https://foo.bar.com/path/to/aaa.bbb/ccc.ddd;dc_trk_aid=486652617;tfua=;gdpr=;gdpr_consent=?&339286293"
使用 Python 时
url = "https://foo.bar.com/path/to/aaa.bbb/ccc.ddd;dc_trk_aid=486652617;tfua=;gdpr=;gdpr_consent=?&339286293"
使用红宝石时
from urllib.parse import urlparse
url_obj = urlparse(url)
url_obj.path # `path/to/aaa.bbb/ccc.ddd`
我猜python考虑;不是url路径的一部分,哪个是“正确的”?
回答
urlparsepath第一个分号后的部分为params:
url_obj.path # '/path/to/aaa.bbb/ccc.ddd'
url_obj.params # 'dc_trk_aid=486652617;tfua=;gdpr=;gdpr_consent='
要复制 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='