【问题标题】:Read session id from a cookie file saved by CURL从 CURL 保存的 cookie 文件中读取会话 ID
【发布时间】:2014-09-22 05:59:03
【问题描述】:

我已使用 CURL 命令将 cookie 文件保存到磁盘。现在我想从 cookie 文件中读取会话 ID,并将其发送到另一个 CURL 请求。我该怎么办?

cookie 文件如下所示。

# Netscape HTTP Cookie File
# http://curl.haxx.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.

#HttpOnly_localhost FALSE   /HazelcastSessClus/ FALSE   0   JSESSIONID  C08191738299B771AB28EB49A18124EC

【问题讨论】:

  • 你能展示保存的 cookie 文件的样本和你的预期输出吗?
  • 通过编辑您的问题发布它,否则很难从 cmets 中读取。

标签: shell curl cookies


【解决方案1】:

会话 ID 是 Cookie 文件中的最后一个字符串。 我暂时做了什么:

SESSION_ID=$(cat cookies.txt | tr -d '\n' | awk -F/ '{print $NF}')
SESSION_ID=$(echo "$SESSION_ID" | awk '{ print $(NF) }')

我知道,这不是一个正确的方法。

【讨论】:

    【解决方案2】:

    不知道cookie文件的内容,一般做法如下:

    awk '/regex identifying the line you want/ { print $field_you_want }' cookie.txt
    

    例如:

    awk '/^CookieId:/ { print $2 }' cookie.txt
    

    (也就是说,作为一个几乎全职从事 shell 开发的人,对于这类任务,使用不同的语言(如 Python、Ruby 或Java。它们具有更复杂且对程序员友好的字符串处理。例如,quoting 是强制性且简单的,拆分和连接字符串看起来不像是线噪音,始终启用等效于 set -o errexit,并且它们具有实际异常处理。)

    【讨论】:

      【解决方案3】:

      使用awk

      awk -v f='JSESSIONID' '$0 ~ f {for (i=2; i<=NF; i++) if ($(i-1)==f) {print $i; exit}}' file
      C08191738299B771AB28EB49A18124EC
      

      【讨论】:

        【解决方案4】:

        这也有效

        SESSION_ID=$(tail -1 cookies.txt | awk -F' ' '{print $NF}')
        

        【讨论】:

          猜你喜欢
          • 2018-12-26
          • 2012-08-09
          • 2014-03-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-06-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多