Python和urllib2:如何使用参数发出GET请求

时间:2010-05-11 22:33:10

标签: python urllib2

我正在构建一个“API API”,它基本上是一个内部REST Web服务的包装器,Web应用程序将向其发出大量请求。 一些Web服务调用需要是GET而不是post,而是传递参数。

是否有“最佳实践”方法将字典编码为查询字符串?例如:?foo=bar&bla=blah

我正在查看urllib2 docs,如果你传递params,看起来它自己决定使用POST或GET,但也许有人知道如何让它变换params字典进入GET请求。

也许这里有类似的东西?如果它支持keep-alive会很棒,因为Web服务器将不断地从REST服务请求东西。

理想情况下,它还可以将XML转换为某种可遍历的python对象。

谢谢!

3 个答案:

答案 0 :(得分:33)

urllib.urlencode()还不够吗?

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

编辑:

您还可以更新现有网址:

  >>> 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包中

编辑23/04/2012:

您还可以查看python-requests - 它最终会杀死urllib:)

答案 1 :(得分:18)

urllib.urlencode

是的,{2.}} / urllib分工在Python 2.x中有点令人困惑。

答案 2 :(得分:1)

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)与网址一起发布到服务器。