Python和urllib2:如何用参数发起GET请求
我正在构建一个“API API”,其实就是一个包装器,用来处理我们内部的REST网络服务,网页应用会频繁地向它发送请求。
有些网络服务的调用需要用GET方式,而不是POST,但又需要传递参数。
有没有什么“最佳实践”来把一个字典编码成查询字符串?比如:?foo=bar&bla=blah
。
我在看urllib2的文档,看起来它会根据你是否传递参数来决定使用POST还是GET,但也许有人知道怎么把参数字典转成GET请求。
也许外面有这样的包?如果它支持保持连接就更好了,因为网络服务器会不断地向REST服务请求东西。
理想情况下,它还应该能把XML转换成某种可以遍历的Python对象。
谢谢!
3 个回答
2
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
是一种编码后的值,可以和网址一起用来发送请求到服务器,形成一个查询字符串,格式是 url+"?"+url_values
。
34
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
包的。
补充 2012年4月23日:
你也可以看看 python-requests - 它最终应该会取代 urllib 的功能 :)
18
没错,在Python 2.x中,urllib
和urllib2
的分工确实有点让人困惑。