2016-02-01 163 views
2
curl -v -d "api_key=kkkk&api_secret=ssss&endpoint=eeee&app=aaaa&params=[{"money":"1111", "last":"0.045"}, {"money": "1111", "last":"0.05"}]... > 500 records" http://my_server:port/api/process/json 

这个应该转换成python脚本,因为我的目标是这些json部件{“money”:“...”,“last”:“....” }拥有500多个不同的货币价值。所有这些都会在最后传递给服务器。将curl命令转换为python代码

我已经尝试了几种不同的方法,甚至在这里询问某些步骤的帮助,但从未成功达到最终的预期结果。 所以我已经试过:

cog = [] 
for i in range(20201, 20705): 
cog.append('{"money": str(i), "last": "0.001"}') 
params = tuple(cog) 
p_c = {} 
p_c['api_key'] = 'kkkk' 
p_c['api_secret'] = 'ssss' 
p_c['app'] = 'aaaa' 
p_c['endpoint'] = 'eeee' 
p_c['params'] = json.dumps(params) 

req1 = requests.post_simple(url=Server.My_server, params=p_c) 

这一个是传递PARAMS为 “钱”:STR(I) http://my_server:port/api/process/json?api_key=kkkk&api_secret=ssss&endpoint=eeee&app=aaa&params=[ { “钱”:STR(I)......... ..........

我,我试过另一种选择(现在试图找到它)​​,它被搞乱则params的秩序,使其他按键

的某些键的值还试过:

p_c = {} 
p_c['api_key'] = 'kkkk' 
p_c['api_secret'] = 'ssss' 
p_c['app'] = 'aaaa' 
p_c['endpoint'] = 'eeee' 

params = '{"money":"11111","last":"0.0001"},' 
for i in range(20201, 20705): 
    params = params + '{"money":"%d","last":"0.0001"},' % i 
dat = ("params="+params) 
req1 = requests.post_simple(url=Server.my_server,params=p_c, data=dat, headers=headers) 

预期通呼叫服务器应该是这样的:双重编码的params参数

http://my_server:port/api/process/json?api_key=kkkk&api_secret=ssss&endpoint=eeee&app=aaa&params=[{"money": "1111", "last": "0.0001"}, {"money":"22222", "last":"0.00001"},.... ,{more than 500},........] 
+0

*“这个搞乱了齿轮的顺序,使得其他键的一些键值”*。你能解释一下吗?它看起来像第一个片段应该做你想要的(一旦你修复'for'循环的缩进)。 – glibdud

+0

“这一个搞乱了参数的顺序” 它应该是PARAMS。 我的意思是,当一切都传递给通话链接看起来像 ..... PARAMS = [{“钱”:“最后”,“钱”:“最后一次},{”1111“:”0.001“ ,“2222”:“0.001”} ......] 我完全不知道如何修复循环,以正确的顺序传递Key:值 –

+0

除了缩进'cog。 append(...)'line,你也需要删除单引号,但是这不会导致你描述的问题,我不确定会怎么样,我不能复制它 – glibdud

回答

4

您:

cog = [] 
for i in range(20201, 20705): 
    cog.append('{"money": str(i), "last": "0.001"}') 
params = tuple(cog) 
... 
p_c['params'] = json.dumps(params) 

您编码字符串的序列,而原来的curl命令包含带有JSON对象的JSON列表(Python中的字典)。 tuple()调用是完全多余的,元组和列表都被转换为相同的JSON结构。

构建词典:

cog = [] 
for i in range(20201, 20705): 
    cog.append({"money": i, "last": "0.001"}) 
... 
p_c['params'] = json.dumps(cog) 

您可以用一个列表理解一行这样做:

cog = [{"money": i, "last": "0.001"} for i in range(20201, 20705)] 
... 
p_c['params'] = json.dumps(params) 

注意,-d开关curl发送一个数据作为身体POST的请求,因此请确保您使用data参数发送参数:

req1 = requests.post(url=Server.My_server, data=p_c) 
+0

谢谢!!!!!!!!有效。更重要的是,第一次与这个问题现在我明白我在做什么 –