You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将curl执行结果存入变量?为何赋值的user_token与PHPSESSID不更新

核心原因

  • Shell变量为静态赋值逻辑:执行变量=$(命令)语句时,仅会当场运行一次命令,将当时的返回结果写入变量,后续如果不重新执行赋值语句,变量值不会自动更新。你直接手动执行curl命令时每次都会发起新的请求,因此拿到的是动态变化的最新值,和变量固定值的表现存在差异。
  • 你写的curl命令本身存在参数错误,也是结果不符合预期的诱因:
    1. 第一条命令中的-l不属于curl的有效常规参数,多余的错误参数可能导致返回结果异常
    2. 第二条命令中的-c参数作用是将响应返回的Cookie写入指定本地文件,后面必须跟文件路径,不能直接跟请求URL,写法不符合curl参数规范
    3. 两条命令的awk语句末尾多了多余的/符号,属于语法错误

正确实现方案

如果需要每次获取最新的user_token和PHPSESSID,可选两种实现方式:

  1. 每次使用变量前重新执行赋值语句
# 每次需要使用最新值前先运行下方两行
CSRF_token=$(curl "http://127.0.0.1/DVWA-master/login.php" | awk '/user_token/ {print $4}')
PHPSESSID=$(curl -i "http://127.0.0.1/DVWA-master/login.php" | awk '/^Set-Cookie: PHPSESSID/ {split($3,a,";"); print a[1]}')
  1. 封装为Shell函数,调用即可自动更新两个变量的值
# 仅需定义一次函数
get_dvwa_auth() {
  temp_resp=$(curl -i "http://127.0.0.1/DVWA-master/login.php")
  PHPSESSID=$(echo "$temp_resp" | awk '/^Set-Cookie: PHPSESSID/ {split($3,a,";"); print a[1]}')
  CSRF_token=$(echo "$temp_resp" | awk '/user_token/ {print $4}')
}

# 后续每次需要最新值时调用函数即可
get_dvwa_auth
# 调用后即可使用更新后的 $CSRF_token 和 $PHPSESSID 变量

注意:你原本的写法分两次发起独立curl请求,拿到的PHPSESSID和user_token不属于同一会话,后续用于登录验证会直接失败。上面的示例采用单次请求同时提取两个值的逻辑,保证两者的会话匹配。

内容的提问来源于stack exchange,提问作者Alvaro Garcia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 05:54:07