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

问题描述 投票:0回答:2

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

  22.12.13 20:21:12;RING;0

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

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

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
perl bash curl http-post
2个回答
7
投票

时间传递正确,只是您的 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
投票

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

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

否则,空格、引号等都会在 bash 命令行上造成严重的麻烦,并导致故障排除变得异常困难。 data1.json 包含 urlencoding 之前的确切数据。

© www.soinside.com 2019 - 2024. All rights reserved.