将curl命令转换为python代码

时间:2016-02-01 17:28:53

标签: python json curl

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个不同的货币价值。并且所有这些都将在最后传递给服务器。

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

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)

这个人正在把这些游行作为" money":str(i)     http://my_server:port/api/process/json?api_key=kkkk&api_secret=ssss&endpoint=eeee&app=aaa&params=[ {"钱":str(i)...................

我有另一种选择,我尝试(现在试图找到它)​​,它会搞乱参数的顺序,制作其他键的一些键值

也尝试过:

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)

对服务器的预期传递调用应如下所示:

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},........] 

1 个答案:

答案 0 :(得分:4)

您正在对params参数进行双重编码:

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)