我有一个 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
它就可以工作。