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

Perl 如何使用curl将带有空格的字符串作为http POST数据传递,perl,bash,curl,http-post,Perl,Bash,Curl,Http Post,我正在运行一个perl脚本,该脚本调用带有参数的bash脚本。 它从套接字读取字符串,将其拆分并保存到数组中。这是这样一个字符串的外观: 22.12.13 20:21:12;RING;0 第一个数组元素是日期,它作为参数传递给bash脚本。 在bash脚本中,参数作为POST数据传递给curl 我不知道如何处理字符串中日期和时间之间的空格。 正确执行curl,服务器以OK(200)响应。然而,它只是作为POST数据传递的第一部分(直到空格)。时间不见了。 curl给出以下错误: curl:

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

  22.12.13 20:21:12;RING;0
第一个数组元素是日期,它作为参数传递给bash脚本。 在bash脚本中,参数作为POST数据传递给curl

我不知道如何处理字符串中日期和时间之间的空格。 正确执行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

时间的流逝是正确的,只是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

@米勒的回答很好。我个人的偏好是对简单、可预测的值使用双引号,对其他任何内容使用临时文件,特别是对动态JSON数据:

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

否则,空格、引号和所有字符都会在bash命令行上造成很大的麻烦,并导致异常困难的故障排除。data1.json包含URL编码之前的确切数据。

编辑bash脚本,使$2包含引号。date=“$2”