如何使用curl传递带空格的字符串作为http POST数据

时间:2013-12-22 20:08:20

标签: perl bash curl http-post

我正在运行一个调用带参数的bash脚本的perl脚本。 它从套接字读取一个字符串,将其拆分并保存到数组中。这就是这样一个字符串的样子:

  22.12.13 20:21:12;RING;0

第一个数组元素是一个日期,它作为参数传递给bash脚本。 在bash脚本中,参数将作为POST数据传递给curl。

我不知道如何处理字符串中日期和时间之间的空格。 卷曲正确执行,服务器以OK(200)响应。然而,它只是作为POST数据传递的第一部分(直到空间)。时间不见了。 curl给出了以下错误:

curl: (6) Couldn't resolve host '20:21'

这些是脚本中的相关行:

     #perl script
     my $EXTPRO="/path/to/script.sh"; 
if ($_ =~ /RING/){ 
     my @C = split(/;/); 
     my @args = ($EXTPRO, $nr, $C[0], "String"); 
     system(@args);


#bash script:
curl http://url.com/add -F foo=$3 -F date=$2 -F foobar=$1

2 个答案:

答案 0 :(得分:4)

时间正确传递,只是你的bash脚本需要在你的错误反映时进行编辑。

curl http://url.com/add -F foo=String -F date=22.12.13 20:21:12 -F foobar=Fake_NR_Data

时间被视为第二个URL。要让你的bash正常工作,只需在引号中加上$ 2

#bash script:
curl http://url.com/add -F foo=$3 -F date="$2" -F foobar=$1

答案 1 :(得分:0)

@Miller的回答很好。我自己的偏好是对简单的,可预测的值使用双引号,对其他任何东西使用临时文件,特别是对于动态JSON数据:

 echo $json_data > data1.json
 [curl -X POST --data-urlencode "foo=$3" --data-urlencode "date=$2" --data-urlencode data1@data1.json

否则,空格,引号和所有内容都会在bash命令行上造成严重的麻烦,导致故障排除变得更加困难。在urlencoding之前,data1.json包含确切的数据。