python
  • query-string
  • standards
  • urllib
  • specifications
  • 2017-05-20 139 views 0 likes 
    0

    Python3的urllib.parse.parse_qs奇怪返回string, list<string>的字典查詢字符串:URL查詢字符串中字段名稱的多個值?

    >>> 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說:

    字典鍵是唯一的查詢變量名和值是值的列表每個名字。

    我可以利用這個「值列表」功能嗎?

    無論Wikipedia,也不Stack Overflow,也不the IETF specification提及關於「多」或字段的值「列表」什麼,我無法找到任何這樣的語法:

    >>> 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/[email protected]=no").query) 
    {'query': ['[email protected]=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']} 
    

    沒有分隔符似乎永遠導致一個值包含多個字符串的鍵。可能嗎?

    回答

    2

    你會得到一個列表長度超過1元,如果有一個重複的查詢鍵:

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

    那是......奇怪,但確定 – cat

    +0

    這是一個有點邊緣情況,但必要的,因爲它在技術上是有效的。如果這回答你的問題,你能否將其標記爲已接受? –

    +0

    是啊,我等着它讓我這樣做:) – cat

    相關問題