从shell脚本中的curl请求中提取访问令牌

发布于 2025-01-11 23:37:00 字数 1143 浏览 0 评论 0原文

使用邮递员作为基础,我在这里有一个curl 请求,我正在尝试返回访问令牌。

AUTHORIZATION=$(curl --location --request POST 'https://some.url/oauth2/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode "grant_type=$GRANT_TYPE" \
--data-urlencode "client_id=$CLIENT_ID" \
--data-urlencode "client_secret=$CLIENT_SECRET"\)

当我 echo 时,我得到如下输出:

{"access_token":"16WkRKbVpHWXlZekJsWVd...","token_type":"Bearer","expires_in":14400}

我想提取 access_token 并在脚本的其他部分中使用。我已尝试添加 jq .access_token -r ,如下所示,但我只是返回一个 null 变量。

AUTHORIZATION=$(curl --location --request POST 'https://some.url/oauth2/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode "grant_type=$GRANT_TYPE" \
--data-urlencode "client_id=$CLIENT_ID" \
--data-urlencode "client_secret=$CLIENT_SECRET"\
-s \
| jq .access_token -r)

解决方案如下:通过 shell 脚本从curl结果中提取令牌建议保存到文件并对其进行 grep 操作。如果可以避免的话,我真的不想将令牌保存到文件中。

Using a postman as a base, I have a curl request here and I'm trying to return the access token.

AUTHORIZATION=$(curl --location --request POST 'https://some.url/oauth2/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode "grant_type=$GRANT_TYPE" \
--data-urlencode "client_id=$CLIENT_ID" \
--data-urlencode "client_secret=$CLIENT_SECRET"\)

When I echo I get an output like:

{"access_token":"16WkRKbVpHWXlZekJsWVd...","token_type":"Bearer","expires_in":14400}

I want to extract the access_token and use in other parts of my script. I've tried the adding jq .access_token -r as seen below, but I'm just returning a null variable.

AUTHORIZATION=$(curl --location --request POST 'https://some.url/oauth2/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode "grant_type=$GRANT_TYPE" \
--data-urlencode "client_id=$CLIENT_ID" \
--data-urlencode "client_secret=$CLIENT_SECRET"\
-s \
| jq .access_token -r)

Solutions here: extract token from curl result by shell script advise saving to file and grepping on it. I don't really want to save a token to a file if I can avoid it.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

酒与心事 2025-01-18 23:37:00

看起来你在调用 jq 时翻转了参数名称和值。我认为应该是:

jq -r .access_token

而不是 jq .access_token -r

除此之外,您的解决方案看起来不错。

It looks like you flipped the parameter name and value when calling jq. I think it should be:

jq -r .access_token

not jq .access_token -r

Other than that your solution looks fine.

jJeQQOZ5 2025-01-18 23:37:00

步骤 1. 将响应保存在变量中

AUTHORIZATION=$(curl --location --request POST 'https://some.url/oauth2/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode "grant_type=$GRANT_TYPE" \
--data-urlencode "client_id=$CLIENT_ID" \
--data-urlencode "client_secret=$CLIENT_SECRET"\)

步骤 2 使用 jq。

AUTHORIZATION = `jq '.access_token' <<< "$AUTHORIZATION"`

步骤 3 消除引号。

AUTHORIZATION=`echo "$AUTHORIZATION" | tr -d '"'`.

Step 1. Save the response in a variable

AUTHORIZATION=$(curl --location --request POST 'https://some.url/oauth2/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode "grant_type=$GRANT_TYPE" \
--data-urlencode "client_id=$CLIENT_ID" \
--data-urlencode "client_secret=$CLIENT_SECRET"\)

Step 2 use jq.

AUTHORIZATION = `jq '.access_token' <<< "$AUTHORIZATION"`

Step 3 eliminate the quotes.

AUTHORIZATION=`echo "$AUTHORIZATION" | tr -d '"'`.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文