解析URL查询字符串的最佳方法

ego*_*cal 43 python string webserver http

在python中解析URL查询字符串(例如,表单附加到URL的数据)中的数据的最佳方法是什么?我的目标是接受表单数据并将其显示在同一页面上.我研究了几种不太适合我的方法.

我正在创建一个简单的Web服务器,目的是学习套接字.此Web服务器不会用于任何其他测试目的.

GET /?1pm=sample&2pm=&3pm=&4pm=&5pm= HTTP/1.1
Host: localhost:50000
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:11.0) Gecko/20100101 Firefox/11.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Referer: http://localhost:50000/?1pm=sample&2pm=&3pm=&4pm=&5pm=
Run Code Online (Sandbox Code Playgroud)

mod*_*ine 45

urllib.parse模块是你的朋友:https://docs.python.org/3/library/urllib.parse.html

查看urllib.parse.parse_qs(解析查询字符串,即通过GET发送到服务器的表单数据或POST发布的表单数据,至少对于非多部分数据).还有cgi.FieldStorage用于解释多部分数据.

有关解析HTTP交互的其余部分,请参阅RFC2616,它是HTTP/1.1协议规范.

  • 我不是为他写剧本。他特别询问了如何解析查询数据,至少这是我在字里行间读到的,即使那些实际上不是 HTTP 标头。但我懒得评论。 (3认同)
  • 对于他提供的信息量,这就是所有可以说的.具体来说,如果您实际上是指HTTP标头:他是否正在使用实际上允许您解释HTTP标头(通过某些流)的Web服务器?他是否使用WSGI(框架解释HTTP标头)?简单的CGI,你必须解释环境并希望最好的?随你. (3认同)

jmu*_*sch 30

以下是使用python3的示例urllib.parse:

from urllib.parse import urlparse, parse_qs
URL='https://someurl.com/with/query_string?i=main&mode=front&sid=12ab&enc=+Hello'
parsed_url = urlparse(URL)
parse_qs(parsed_url.query)
Run Code Online (Sandbox Code Playgroud)

输出:

{'i': ['main'], 'enc': [' Hello '], 'mode': ['front'], 'sid': ['12ab']}
Run Code Online (Sandbox Code Playgroud)

python2的注意事项: from urlparse import urlparse, parse_qs

请参阅:https://pythonhosted.org/six/#module-six.moves.urllib.parse

  • @Suisse请参阅/sf/ask/801317401/,这些值位于列表中,因为可以对多个值进行编码,请参阅:https://stackoverflow.com/ questions/2571145/urlencode-an-array-of-values 希望有帮助 (3认同)
  • 为什么像这样的值```['value']```?```dic['enc']``` 得到 ```['Hello']``` - 如何得到 'Hello'?与分裂? (2认同)

ahu*_*igo 9

如果从查询字符串需要唯一的密钥,使用dict()parse_qsl()

import urllib.parse
urllib.parse.urlparse('https://someurl.com/with/query_string?a=1&b=2&b=3').query
    a=1&b=2&b=3
urllib.parse.parse_qs('a=1&b=2&b=3');
    {'a': ['1'], 'b': ['2','3']}
urllib.parse.parse_qsl('a=1&b=2&b=3')
    [('a', '1'), ('b', '2'), ('b', '3')]
dict(urllib.parse.parse_qsl('a=1&b=2&b=3'))
    {'a': '1', 'b': '3'}
Run Code Online (Sandbox Code Playgroud)


小智 6

内置于 python 2.7

>>> from urlparse import parse_qs
>>> parse_qs("search=quint&tags=python")
{'search': ['quint'], 'tags': ['python']}
Run Code Online (Sandbox Code Playgroud)