Python与Ruby解析URL路径的差异:哪种处理符合URL标准?
两种解析规则均符合规范,差异来自对路径参数的默认处理逻辑
RFC 3986(统一资源标识符通用标准)3.3节明确规定:URL的路径组件允许使用分号;附加路径参数(也叫Matrix参数),格式为;参数名=参数值,支持多组参数拼接,这部分参数本身属于路径的组成部分。
Python的处理逻辑
Python urllib.parse.urlparse 默认做了路径参数自动拆分:会把分号之后、查询字符串起始标识?之前的内容,单独拆分到url_obj.params属性中存储,因此url_obj.path仅返回分号之前的纯路径部分。
你可以直接打印url_obj.params验证,输出内容就是dc_trk_aid=486652617;tfua=;gdpr=;gdpr_consent=,Python并没有丢弃这部分内容,只是拆分到了独立字段。
Ruby的处理逻辑
Ruby URI.parse 默认没有做路径参数的自动拆分,会把分号及后续到?之前的所有内容都归入path属性,完全对应RFC中「路径参数属于路径组件」的定义。
如果需要让Python的输出和Ruby一致,手动拼接url_obj.path + ';' + url_obj.params即可得到完整的路径+参数内容。
内容的提问来源于stack exchange,提问作者Zou Googi
相关产品推荐
相关产品推荐

