URL查询字符串中字段名称的多个值?

时间:2017-05-20 12:14:19

标签: python query-string standards urllib specifications

Python3&#39; s urllib.parse.parse_qs奇怪地为查询字符串返回string, list<string>字典:

>>> import urllib.parse as p
>>> url = p.urlparse("http://exam.ple/path?query=string&yes=no")
ParseResult(scheme='http', netloc='exam.ple', path='/path', params='', query='query=string&yes=no', fragment='')

>>> p.parse_qs(url.query)
{'query': ['string'], 'yes': ['no']}

该函数documentation表示:

  

字典键是唯一的查询变量名称,值是每个名称的值列表。

我可以利用这个&#34;值列表&#34;能力莫名其妙?

WikipediaStack Overflowthe IETF specification都没有提及&#34;多个&#34;或&#34;列出&#34;字段的值,我找不到任何这样的语法:

>>> p.parse_qs(p.urlparse("http://exam.ple/path?query=string&yes=no/a=0").query)
{'query': ['string'], 'yes': ['no/a=0']}
>>> p.parse_qs(p.urlparse("http://exam.ple/path?query=string@yes=no").query)
{'query': ['string@yes=no']}
>>> p.parse_qs(p.urlparse("http://exam.ple/path?query=string;yes=no").query)
{'query': ['string'], 'yes': ['no']}
>>> p.parse_qs(p.urlparse("http://exam.ple/path?query=string,yes=no").query)
{'query': ['string,yes=no']}

没有分隔符可能会导致键值包含多个字符串。有可能吗?

1 个答案:

答案 0 :(得分:5)

如果有重复的查询键,您将获得长于1个元素的列表:

>>> url = p.urlparse("http://exam.ple/path?query=string1&query=string2")
>>> p.parse_qs(url.query)
{'query': ['string1', 'string2']}