我正在使用 requests lib 和 python 2.7 执行此操作时:
import requests
uri_params = {
u'email': u'myEmail@domain.com',
u'id_user': 15,
u'user_var': {
u'var1': u'val1',
u'var2': u'val2',
}
}
r = requests.get('http://google.com/', params=uri_params)
print r.url
结果它给了我: http ://www.google.com/?id_user=15&email=myEmail%40domain.com&user_var=var1&user_var=var2
而不是 http://www.google.com/?id_user=15&email=myEmail%40domain.com&user_var%5Bvar1%5D=val1&user_var%5Bvar2%5D=val2 (= user_var[var1]=val1&user_var[var2]=val2)
您知道请求库是否可以作为处理此问题的方法吗?
编辑:我也花了几分钟时间了解如何使用 Martijn Pieters 的代码。所以这里是像我这样的 Python 新手的最终代码:
import requests
import urllib
def nested_object(name, mapping):
return [(u'{}[{}]'.format(name, key), value) for key, value in mapping.iteritems()]
uri_params = [
(u'email', u'myEmail@domain.com'),
(u'id_user', 15),
]
uri_params.extend(nested_object(u'user_var', {u'var1': u'val1', u'var2': u'val2'}))
encoded = urllib.urlencode(uri_params)
r = requests.get('http://google.com/', params=encoded)
print r.url