Python和urllib2:如何使用参数进行GET请求

我正在构build一个“API API”,它基本上是一个内部REST Web服务的包装,Web应用程序将提出很多请求。 一些Web服务调用需要GET而不是post,但是传递参数。

有没有一种“最佳实践”的方式来编码字典到查询string? 例如: ?foo=bar&bla=blah

我在看urllib2文档 ,它看起来像它自己决定使用POST或GET的基础上,如果您传递参数或不,但也许有人知道如何使其将params字典转换为GET请求。

也许有一个这样的东西在外面的包? 如果它支持保持活动,那将是非常好的,因为Web服务器将不断地向REST服务请求一些东西。

理想情况下,也会将XML转换成某种可遍历的python对象。

谢谢!

urllib.urlencode

是的, urllib / urllib2分工在Python 2.x中有点混乱。

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

编辑23/04/2012:

你也可以看看python-requests – 它应该最终杀死urllibs 🙂

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