webdevqa.jp.net

Python and urllib2:パラメーターを使用してGETリクエストを行う方法

私は「API API」を構築していますが、これは基本的に社内でREST Webサービスが多くのリクエストを行うWebサービスのラッパーです。 postではなくGETになりますが、パラメータを渡します。

辞書をクエリ文字列にエンコードする「ベストプラクティス」の方法はありますか?例:?foo=bar&bla=blah

私は rllib2 docs を見ていますが、paramsを渡すかどうかに基づいてPOSTまたはGETを使用するかどうかを自分で決定するようですが、多分誰かがparams辞書をGETリクエストに変換する方法を知っています。

たぶん、このようなパッケージがありますか? WebサーバーがREST=サービスから常に要求を行うため、キープアライブをサポートしていれば素晴らしいことです。

理想的には、XMLを何らかの種類の通過可能なpythonオブジェクトに変換するものでもあります。

ありがとう!

41
adamJLev

rllib.urlencode

はい、urllib/urllib2分業はPython 2.x.

18
msw

rllib.urlencode() では不十分ですか?

>>> import urllib
>>> urllib.urlencode({'foo': 'bar', 'bla': 'blah'})
foo=bar&bla=blah

編集:

既存のURLを更新することもできます。

  >>> import urlparse, urlencode
  >>> url_dict = urlparse.parse_qs('a=b&c=d')
  >>> url_dict
  {'a': ['b'], 'c': ['d']}
  >>> url_dict['a'].append('x')
  >>> url_dict
  {'a': ['b', 'x'], 'c': ['d']}
  >>> urllib.urlencode(url_dict, True)
  'a=b&a=x&c=d'

ご了承ください parse_qs関数は、Python 2.6以前はcgiパッケージにありました

2012年4月23日編集:

また、 python-requests を確認することもできます-最終的にurllibを強制終了します:)

33
_import urllib
data = {}
data["val1"] = "VALUE1"
data["val2"] = "VALUE2"
data["val3"] = "VALUE3"
url_values = urllib.urlencode(data)
url = "https://www.python.org"
print url + "?" + url_values
_

_url_values_はエンコードされた値であり、クエリstring(url+"?"+url_values)としてurlとともにサーバーに投稿するために使用できます。

1
Vijay Chander