如何将curl命令的输出通过管道传输到环境变量并在另一个curl命令中使用它?

如何将curl命令的输出通过管道传输到环境变量并在另一个curl命令中使用它?

我有一个 REST 端点,我可以从中获取访问令牌。要获取访问令牌(JSON Web 令牌、JWT)并将该值导出为环境变量,我执行以下操作。

export ACCESS_TOKEN=$(curl -i -H 'Content-Type: application/json' -X POST -d @credentials.json http://localhost:8080/api/user/login)

然后我将此令牌回显到控制台echo $ACCESS_TOKEN并得到类似的内容。

eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiI1MTBlMjRiYWZmZTY0NjMyOGRiNjg1N2ViMTdlZTE1NCISImFkZHIiOiIwOjA6MDowOjA6MDowOjEiLCJzY2hlbWUIOiJodHRwIiwicG9ydCI6IjgwODAILCJp YXQiOjE0NjgzNzg5NDV9.COGBYBrx3oQva2kIiObBOYkEFIL2BODcrSivxWvhuLS-aLsrMGO2z2aCddpwS2yZUB88Q3GOIU8QklbnfRMprQ

请注意,第一个字符之前有一个空格。我不认为这是一个问题,因为如果我直接从控制台导出该值然后将其回显,空间仍然存在。

export ACCESS_TOKEN=eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiI1MTBlMjRiYWZmZTY0NjMyOGRiNjg1N2ViMTdlZTE1NCIsImFkZHIiOiIwOjA6MDowOjA6MDowOjEiLCJzY2hlbWUiOiJodHRwIiwicG9ydCI6IjgwODAiLCJpYXQiOjE0NjgzNzg5NDV9.COGBYBrx3oQvA2kIiObBOYkEFIL2BODcrSivxWvhuLs-aLsrMGO2z2aCddpwS2yZUB88Q3GOIU8QklbnfRMprQ

现在我需要使用此令牌来测试我的 REST 端点,并尝试了类似以下的操作。

curl -i \
 -H 'x-access-token: '$ACCESS_TOKEN'' \
 -X POST -d @mydata.json \
 http://localhost:8080/api/data

但是,我得到以下输出。

卷曲:(7)无法连接到服务器
卷曲:(3)URL中发现非法字符
卷曲:(6)无法解析主机:服务器
卷曲:(3)URL中发现非法字符
卷曲:(6)无法解析主机:Access-Control-Allow-Methods
卷曲:(6)无法解析主机:POST,
卷曲:(6)无法解析主机:PUT,
卷曲:(6)无法解析主机:GET,
卷曲:(6)无法解析主机:选项,
卷曲:(3)URL中发现非法字符
卷曲:(6)无法解析主机:Access-Control-Max-Age
卷曲:(3)URL中发现非法字符
卷曲:(6)无法解析主机:Access-Control-Allow-Headers
卷曲:(6)无法解析主机:起源,
卷曲:(6)无法解析主机:X-Requested-With,
卷曲:(6)无法解析主机:内容类型,
卷曲:(6)无法解析主机:接受,
卷曲:(3)URL中发现非法字符
卷曲:(6)无法解析主机:Access-Control-Allow-Credentials
卷曲:(3)URL中发现非法字符
卷曲:(6)无法解析主机:内容类型
卷曲:(3)URL中发现非法字符
卷曲:(6)无法解析主机:内容长度
卷曲:(3)URL中发现非法字符
卷曲:(6)无法解析主机:日期
卷曲:(6)无法解析主机:星期三,
卷曲:(7)无法解析主机:星期三,
卷曲:(6)无法解析主机:七月
卷曲:(7)无法解析主机:Jul
卷曲:(6)无法解析主机:03:02
卷曲:(3)URL中发现非法字符
卷曲:(3)URL中发现非法字符
卷曲:(6)无法解析主机:eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiI1MTBlMjRiYWZmZTY0NjMyOGRiNjg1N2ViMTdlZTE1NCIsImFkZHIiOiIwOjA6MDowOjA6MDowOjEiLCJzY2hlbWUiOiJodHRwIiwicG9ydCI 6IjgwoDAiLCJpYXQiOjE0NjgzNzg5NDV9.COGBYBrx3oQvA2kIiObBOYkEFIL2BODcrSivxWvhuLS-aLsrMGO2z2aCd
HTTP/1.1 100 继续

HTTP/1.1 403 禁止
服务器:Apache-Coyote/1.1
访问控制允许方法:POST、PUT、GET、OPTIONS、DELETE
访问控制最大年龄:3600
访问控制允许标头:来源、X-Requested-With、内容类型、接受、x-access-token
访问控制允许凭据: true
内容长度:0
日期:2016 年 7 月 13 日星期三 03:23:04 GMT
连接:关闭

如果我直接export ACCESS_TOKEN=....在 shell 中执行完全相同的curl命令,那么一切都会正常。

另外,如果我将导出放入sh文件中,然后执行curl上面的命令,那么它也可以工作。

#!/bin/bash
export ACCESS_TOKEN=eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiI1MTBlMjRiYWZmZTY0NjMyOGRiNjg1N2ViMTdlZTE1NCIsImFkZHIiOiIwOjA6MDowOjA6MDowOjEiLCJzY2hlbWUiOiJodHRwIiwicG9ydCI6IjgwODAiLCJpYXQiOjE0NjgzNzkwMjB9.lV6jSf9w5_AbsPrNcWcgQpS-DWQVxnH65u06BDGIyL-ST_gg4xXZ2KLAs-kbwckRB3OFy637G1op6PZ2tpHdUQ

知道我在这里做错了什么吗?

答案1

问题在于使用,-i因为此选项在输出中包含标题。

奇怪的是,除非你这样做,否则echo "$ACCESS_TOKEN"你不会看到污染 REST 响应的标头返回。

只需删除-i它就可以工作。

相关内容