我正在构建一个“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对象。
谢谢!
答案 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)
是的,{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)
与网址一起发布到服务器。