72

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=
4

5 に答える 5

80

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)

出力:

{'i': ['main'], 'enc': [' Hello '], 'mode': ['front'], 'sid': ['12ab']}

python2 に関する注意:from urlparse import urlparse, parse_qs

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

于 2016-10-03T23:24:36.197 に答える
52

urllib.parse モジュールはあなたの友達です: https://docs.python.org/3/library/urllib.parse.html

urllib.parse.parse_qsを確認してください(クエリ文字列の解析、つまり、GET によってサーバーに送信されたフォーム データ、または POST によってポストされたフォーム データ、少なくとも非マルチパート データの場合)。マルチパートデータを解釈するためのcgi.FieldStorageもあります。

HTTP インタラクションの残りの解析については、HTTP/1.1 プロトコル仕様であるRFC2616を参照してください。

于 2012-04-11T20:11:43.183 に答える
1

インポートなしの 1 行のクイック プロトタイピング CGI vars のみで、明らかに最高ではありませんが、役立つ可能性があります。

agrs = dict(item.split('=') for item in env['QUERY_STRING'].split('&') if item)
于 2021-05-07T11:26:53.427 に答える