如何用Shell命令从curl请求中提取Token并复用?
提取并复用Curl返回的Token(Bash脚本实现)
方法1:用jq处理JSON(推荐)
JSON格式的返回值用专门工具处理最稳妥,能避免正则匹配的各种意外问题。
- 先安装jq(大部分Linux发行版可通过包管理器安装):
- Debian/Ubuntu:
sudo apt install jq - CentOS/RHEL:
sudo yum install jq
- Debian/Ubuntu:
- 将返回的Token存入环境变量:
这里TOKEN=$(curl -k 'https://server:port/session' -X POST -H 'Content-Type: application/json' -d '{"username":"admin","password":"password"}' | jq -r '.token')jq -r '.token'的作用是直接输出token字段的原始值(不带双引号)。 - 后续命令直接复用变量:
注意要用双引号包裹curl https://server:port/ -k -X POST -H 'Content-Type: application/json' -H "X-Cookie:token=$TOKEN" -d ''X-Cookie的内容,这样Bash才会解析$TOKEN变量。
方法2:用sed提取(无jq时备选)
如果暂时没法装jq,且返回的JSON格式固定(比如token字段的位置、引号格式不会变),可以用sed正则匹配:
- 提取Token到变量:
正则说明:TOKEN=$(curl -k 'https://server:port/session' -X POST -H 'Content-Type: application/json' -d '{"username":"admin","password":"password"}' | sed -n 's/.*"token":"\([^"]*\)".*/\1/p')"token":"\([^"]*\)"精准匹配token字段的键值对,\([^"]*\)捕获引号内的Token内容,最后用\1输出捕获结果。 - 后续复用变量的命令和方法1完全一致:
curl https://server:port/ -k -X POST -H 'Content-Type: application/json' -H "X-Cookie:token=$TOKEN" -d ''
内容的提问来源于stack exchange,提问作者Aprilia Ramadhannia
相关产品推荐
相关产品推荐

