curl和bash脚本,使用不记名令牌执行发布请求

时间:2018-06-05 11:01:11

标签: bash curl

请教育我!

我的脚本是:

#!/usr/bin/env bash

username="zDISABLEDc"
rand="Z01c20a936f474b"

single_quote="'"
curl_string_part1_="-X PUT https://api.secretkgbwebsite.com/api/v4.1/user/$username "
curl_string_part2_='-H "Authorization: bearer 00000000-4cd9-4bc6-90da-5d43a155f30e" -H "Cache-Control: no-cache" -H "Content-Type: application/json" -H "Postman-Token: 351e4bf1-04a2-4c99-8a21-21a05f51244a" -d '
curl_string_part3_='{"password": "'
curl_string_part4_='"}'

curl_string_complete="$curl_string_part1_$curl_string_part2_$single_quote$curl_string_part3_$rand$curl_string_part4_$single_quote"

echo $curl_string_complete
echo " "
success=0
curl $curl_string_complete && success=1

if ((success)); then
    echo "SUCCESS. password has been reset to : "
    echo $rand
else
    echo "problem sending and resetting password."
fi

我得到的错误是:

  

{"错误":"未授权"," error_description":"在SecurityContext"} curl中找不到身份验证对象: (6)无法解决主持人:持票人       卷曲:(6)无法解析主持人:00000000-4cd9-4bc6-90da-5d43a155f30e"
      curl:(6)无法解析主机:no-cache"
      卷曲:(6)无法解析主持人:申请
      卷曲:(6)无法解析主持人:351e4bf1-04a2-4c99-8a21-21a05f51244a"
      卷曲:(3)[第1栏] [globbing]无与伦比的紧密支撑/支架

现在令人烦恼的是,如果我运行我的程序回送的行(此行:echo $curl_string_complete)与curl,curl很高兴并且运行该行没有问题。

1 个答案:

答案 0 :(得分:2)

您遇到shell扩展过程的问题,请参阅bash手册和posix shell手册以获取更多详细信息。在变量扩展之前处理语法引号,因此变量内部的引用是文字的。在echo的情况下,变量是分裂的,但是因为空间的echo连接,所以无法看到。

echo $curl_string_complete更改printf "<%s>\n" $curl_string_complete以查看参数的拆分方式。

解决问题你可以使用数组,如:

curl_string_part1_=( -X PUT https://api.secretkgbwebsite.com/api/v4.1/user/$username )

curl_string_part2_=(-H "Authorization: bearer 00000000-4cd9-4bc6-90da-5d43a155f30e" -H "Cache-Control: no-cache" -H "Content-Type: application/json" -H "Postman-Token: 351e4bf1-04a2-4c99-8a21-21a05f51244a" -d )
curl_string_part3_='{"password": "'
curl_string_part4_='"}'

curl_string_complete=( "${curl_string_part1_[@]}" "${curl_string_part2_[@]}" "$curl_string_part3_$rand$curl_string_part4_" )

curl "${curl_string_complete[@]}"