我从shell执行以下命令:
curl -v -s -X GET -H "UserName: myUsername" -H "Password: myPassword"
https://example.com
并且从终端I获得具有不同响应参数的HTTP / 1.1 200响应:
HTTP/1.1 200 OK
Date: Fri, 23 Oct 2015 10:04:02 GMT
Name: myName
Age: myAge
...
现在,在我的.sh文件中,我想要取名字和年龄,所以我的变量$ name和$ age中的值。 我最初的想法是将stdout重定向到要解析的文件:
curl -v -s -X GET -H "UserName: myUsername" -H "Password: myPassword"
https://example.com > out.txt
但该文件为空。
在HTTP响应中增强了bash脚本中变量的一些想法吗?
编辑:我想要采取的变量位于回复标题中
由于
答案 0 :(得分:2)
您必须在命令行中添加--write-out '%{http_code}'
,curl会将HTTP_CODE打印到stdout。
e.g。curl --silent --show-error --head http://some.url.com --user user:passwd --write-out '%{http_code}'
但是我不知道你可以打印的所有其他“变量”。
答案 1 :(得分:1)
您可以使用grep和cut命令来获得所需的内容。
response=$(curl -i http://yourwebsite.com/xxx.php -H ... 2>/dev/null)
name=$(echo "$response" | grep Name | cut -d ':' -f2)
age=$(echo "$response" | grep MyAge | cut -d ':' -f2)
我将年龄更改为 MyAge :年龄是标准的HTTP标头,冒险覆盖它不是一个好主意。
答案 2 :(得分:1)
我解决了:
header=$(curl -v -I -s -X GET -H "UserName: myUserName" -H "Password:
myPassword" https://example.com)
name=`echo "$header" | grep name`
name=`echo ${name:4}`
age=`echo "$header" | grep age`
age=`echo ${age:3}`