我如何使用curl命令从bash脚本获取HTTP响应?

时间:2015-10-23 10:19:07

标签: linux bash http curl sh

我从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脚本中变量的一些想法吗?

编辑:我想要采取的变量位于回复标题中

由于

3 个答案:

答案 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}`