为什么在 werkzeug 2.3.x 中将分号视为查询字符串的分隔符

问题描述 投票:0回答:1

我有一个运行flask==2.2.5和werkzeug==2.2.3的生产应用程序,需要将werkzeug包升级到版本2.3.8或3.0.1。但是当我更新后进行测试时,werkzeug 包中有一些更改日志中未提及的更改,该更改基本上考虑了“;”字符与查询字符串中的“&”作为分隔符并将其分隔开。“&”是旧版本中唯一的分隔符。有谁知道为什么会发生这种情况或如何解决这个问题?

示例:

对于示例请求网址 - http://example.com/path?param1=p1value1¶m2=p2value1;p2value2

request.params 的预期输出应该是

ImmutableMultiDict([('param1', 'p1value1'), ('param2', 'p2value1;p2value2')])

但是我得到的输出是

ImmutableMultiDict([('param1', 'p1value1'), ('param2', 'p2value1', 'p2value2', '')])

python flask werkzeug
1个回答
0
投票

正如@John Bollinger 提到的,

Werkzeug v2.3.0 从其定制的内部 URL 解析代码切换为标准 urllib.parse。 urllib.parse 的查询字符串函数用于支持 & 和 ;作为查询参数分隔符,但它们不再是了。它们仅接受一个分隔符,默认为 &。 Python 3.6 - 3.9,对查询字符串解析的更改分别应用于每个版本的修订历史记录中。对于 Python 3.8,您至少需要 v3.8.8。

© www.soinside.com 2019 - 2024. All rights reserved.