如何在不考虑查询参数顺序的情况下测试URI相等性

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

我想要URI::eq之类的东西,只是被比较的URI的规范形式忽略了查询参数的顺序,

URI::eq

我希望此返回true。

perl uri equality query-parameters
2个回答
1
投票

您可以规范化查询。

print URI::eq(
  q[http://a.a/?a=1&z=2], # a before z
  q[http://a.a/?z=2&a=1]  # z before a
);

0
投票

[我建议将查询参数键作为列表获取(例如,使用URI :: QueryParam),对其进行排序并进行比较(可以使用Data :: Compare)。

如果它们相同,则必须比较每个键的值。

请记住,这不一定是琐碎的,值可以是JSON,您必须先对其进行解码或确保其规范,因此直截了当的'eq'可能会导致假阴性。

具有解码的JSON,您将最终得到一个相当任意的数据结构(至少可序列化)。现在,eq可能足以满足您的目的,也可能不能满足您的需要(一个空字符串等于无值吗?0等于0.0?等)。

您的示例似乎表明您没有考虑这一点,因此也许您不需要它,这将使事情变得非常简单:只需'eq'-比较所有值。或者您低估了这个问题,在这种情况下,您可能想问另一个问题或发布其他信息。

我个人不知道执行此操作的模块,但是很高兴得知有一个模块!

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