2015-10-23 253 views
2

我有以下指令,我從殼執行:如何使用curl命令從bash腳本獲取HTTP響應?

curl -v -s -X GET -H "UserName: myUsername" -H "Password: myPassword" 
https://example.com 

和從終端我有HTTP/1.1 200響應具有不同的響應參數:

HTTP/1.1 200 OK 
Date: Fri, 23 Oct 2015 10:04:02 GMT 
Name: myName 
Age: myAge 

... 

現在,在我的.SH文件我想要名稱和年齡,所以有我的變量$名稱和$年齡值。 我最初的想法是標準輸出重定向到一個文件來分析:

curl -v -s -X GET -H "UserName: myUsername" -H "Password: myPassword" 
https://example.com > out.txt 

但該文件是空的。

有一些想法在HTTP響應中增強了bash腳本中的變量嗎?

編輯:我想利用變量是在響應的頭

感謝

+0

加上'-o - '捲曲的輸出重定向到標準輸出,並使用反引號從一個命令的輸出填充的變量。 – tillz

回答

2

您必須添加--write-out '%{http_code}'到命令行和捲曲將打印HTTP_CODE到標準輸出。

例如curl --silent --show-error --head http://some.url.com --user user:passwd --write-out '%{http_code}'

但是我不知道你可以打印出的所有其他「變量」。

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標頭,這是不是一個好主意,風險覆蓋它。

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