2014-09-26 56 views
1

我知道我可以使用在卷曲的请求与正常数据混合JSON在bash

curl --data "param1=value1&param2=value2" http://hostname/resource 

curl --request POST https://$url?param1=value1&param2=value2 

但是,我需要做的,如果参数1是值和参数2是一个JSON?

这是行不通的(TM),如果我只是折腾JSON在那里,甚至采用可变

$json='{"data":"value"}' 
curl --request POST https://$url?param1=value1&param2=$json 

什么诀窍吗? 请注意,我只需要拨打一个电话。

谢谢!

+0

你能更具体地了解它不起作用吗?你有错误吗?数据是否未到达服务器? – ebo 2014-09-27 15:13:33

回答

1

好吧,如果我们什么都逃不过(使用python)这里是什么样子

>>> x 
'{"data": "value"}' 
>>> urllib.urlencode({'param1':'value1', 'param2':x}) 
'param2=%7B%22data%22%3A+%22value%22%7D&param1=value1' 

或者,使用卷曲选项

curl localhost:8080 --data-urlencode 'param1={"data":"value"}' 

将发送给服务器

param1=%7B%22data%22%3A%22value%22%7D 

你可能注意到第一个版本有一个+,它可能来自json编码的空间,不确定它是否和rks或者它是否可以被删除

+0

是的,诀窍在于对整个JSON进行网址编码。我正在使用另一种方式来做到这一点,但你的想法是正确的。 – Daniel 2014-10-29 13:44:54