gpt4 book ai didi

bash - 将带有空格的变量扩展为 curl POST 变量

转载 作者:行者123 更新时间:2023-11-29 09:14:18 27 4
gpt4 key购买 nike

一些研究揭示了一些有用的 stackexchange 帖子,即 expanding variable in CURL ,但给出的答案似乎无法正确处理其中包含空格的 bash 变量。

我正在为 awk 的输出设置一个变量,为一个子字符串解析一个字符串(实际上截断为 150 个字符)。我尝试通过 curl 发布的字符串中有空格。

当我使用以下 curl 参数时,POST 变量 Body 被设置为第一个空格之前的字符串部分。

curl -X POST 'https://api.twilio.com/2010-04-01/Accounts/GUID/SMS/Messages.xml' -d 'From=DIDfrom' -d 'To=DIDto ' -d 'Body="'$smsbody'"-u SECGUID

smsbody 设置为:

smsbody="$(echo $HOSTNAME$ $SERVICEDESC$ in $SERVICESTATE$\: $SERVICEOUTPUT$ | awk '{print substr($0,0,150)}')"

因此 smsbody 中唯一被 POST 的部分是 $HOSTNAME$(恰好是一个没有任何空格字符的字符串)。

我应该使用什么 curl 语法来正确嵌套 bash 变量以进行扩展,但将其视为单个数据字段?

看起来很微不足道,但我有一段时间搞砸了引号,但运气不好。我认为具有更好 CLI-fu 的人可以在一秒钟内处理它。

谢谢!

最佳答案

看起来您在Body 之前多了一个单引号。您还需要双引号,否则 $smsbody 将不会被计算。

试试这个:

curl -X POST 'https://api.twilio.com/2010-04-01/Accounts/GUID/SMS/Messages.xml' \
-d 'From=DIDfrom' -d 'To=DIDto' -d "Body=$smsbody" -u SECGUID

如果 $ 仍然是一个问题(我认为空格不是),请尝试在它们前面添加一个 \:

smsbody2=`echo $smsbody | sed 's/\\$/\\\\$/g'`
curl -X POST 'https://api.twilio.com/2010-04-01/Accounts/GUID/SMS/Messages.xml' \
-d 'From=DIDfrom' -d 'To=DIDto' -d "Body=$smsbody2" -u SECGUID

如果我运行 nc -l 5000 并将 twilio 地址更改为 localhost:5000,我会看到 smsbody 变量正确进入。

matt@goliath:~$ nc -l 5000POST / HTTP/1.1
Authorization: Basic U0VDR1VJRDphc2Q=
User-Agent: curl/7.21.6 (x86_64-apple-darwin10.7.0) libcurl/7.21.6 OpenSSL/1.0.0e zlib/1.2.5 libidn/1.20
Host: localhost:5000
Accept: */*
Content-Length: 45
Content-Type: application/x-www-form-urlencoded

From=DIDfrom&To=DIDto&Body=goliath$ $ in $:

关于bash - 将带有空格的变量扩展为 curl POST 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7637078/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com