如何对 python 中的多值键进行 urlencode?
How to urlencode multi valued keys in python?
我想在 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' 键有两个值,所以只处理一个参数。解决此问题的最简单方法是什么?
urlencode
将接受产生二元组的序列。
Convert a mapping object or a sequence of two-element tuples to a “percent-encoded” string. ...
例如
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 很重要,这也是您要使用的。
我想在 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' 键有两个值,所以只处理一个参数。解决此问题的最简单方法是什么?
urlencode
将接受产生二元组的序列。
Convert a mapping object or a sequence of two-element tuples to a “percent-encoded” string. ...
例如
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 很重要,这也是您要使用的。