如何在python中urlencode多值键?

时间:2015-11-09 16:33:18

标签: python urlencode

我想在python中执行此操作:

curl 'http://localhost:8983/solr/samos/select?rows=0&q=*:*&fq=time:\[2012-08-01T00:00:00Z%20TO%202013-10-01T00:00:00Z\]&fq=loc:\[15,-45%20TO%2030,-30\]'

所以我做了一本字典并尝试了这个请求:

webpage = 'http://localhost:8983/solr/samos/select'
query_args = {
    'q' : '*:*', \
    'fq' : ['time:[2012-08-01T00:00:00Z TO 2013-10-01T00:00:00Z]', \
    'fq' : 'loc:[15,-45 TO 30,-30]', \
    'rows' : '0' \
}
query = urllib.urlencode(query_args)
req = urllib2.Request(webpage, query)
res = urllib2.urlopen(req)

这里的问题是我的fq' key,因此只处理一个参数。解决这个问题的最简单方法是什么?

1 个答案:

答案 0 :(得分:2)

urlencode将接受产生2元组的序列。

  

将映射对象 两元素元组序列转换为“百分比编码”字符串。 ...

e.g。

query_args = [
    ('q', '*:*'),
    ('fq', 'time:[2012-08-01T00:00:00Z TO 2013-10-01T00:00:00Z]'),
    ('fq', 'loc:[15,-45 TO 30,-30]'),
    ('rows', '0'),
]

演示:

>>> urllib.urlencode(query_args)
'q=%2A%3A%2A&fq=time%3A%5B2012-08-01T00%3A00%3A00Z+TO+2013-10-01T00%3A00%3A00Z%5D&fq=loc%3A%5B15%2C-45+TO+30%2C-30%5D&rows=0'

注意,如果由于某种原因查询参数的 order 很重要,那么这也是您想要使用的内容。