我使用curl来获取http报头以查找http状态代码并返回响应。我使用命令获取http头信息
curl -I http://localhost
为了得到响应,我使用命令
curl http://localhost
一旦使用了-I标志,我就只得到了头信息,响应就不再存在了。是否有一种方法可以同时获得http响应和头/http状态码在一个命令?
我使用curl来获取http报头以查找http状态代码并返回响应。我使用命令获取http头信息
curl -I http://localhost
为了得到响应,我使用命令
curl http://localhost
一旦使用了-I标志,我就只得到了头信息,响应就不再存在了。是否有一种方法可以同时获得http响应和头/http状态码在一个命令?
当前回答
这对我来说很管用:
curl -Uri 'google.com' | select-object StatusCode
其他回答
我发现这个问题是因为我想要独立访问响应和内容,以便为用户添加一些错误处理。
Curl允许您自定义输出。您可以打印HTTP状态代码以std输出并将内容写入另一个文件。
curl -s -o response.txt -w "%{http_code}" http://example.com
这允许您检查返回代码,然后决定是否值得打印、处理、记录响应等。
http_response=$(curl -s -o response.txt -w "%{http_code}" http://example.com)
if [ $http_response != "200" ]; then
# handle error
else
echo "Server returned:"
cat response.txt
fi
%{http_code}是一个由curl代替的变量。你可以做更多的事情,或者发送代码到stderr,等等。参见curl手册和——write-out选项。
-w, --write-out Make curl display information on stdout after a completed transfer. The format is a string that may contain plain text mixed with any number of variables. The format can be specified as a literal "string", or you can have curl read the format from a file with "@filename" and to tell curl to read the format from stdin you write "@-". The variables present in the output format will be substituted by the value or text that curl thinks fit, as described below. All variables are specified as %{variable_name} and to output a normal % you just write them as %%. You can output a newline by using \n, a carriage return with \r and a tab space with \t. The output will be written to standard output, but this can be switched to standard error by using %{stderr}.
https://man7.org/linux/man-pages/man1/curl.1.html
我用过这个:
request_cmd="$(curl -i -o - --silent -X GET --header 'Accept: application/json' --header 'Authorization: _your_auth_code==' 'https://example.com')"
获取HTTP状态
http_status=$(echo "$request_cmd" | grep HTTP | awk '{print $2}')
echo $http_status
为了获得响应体,我使用了这个
output_response=$(echo "$request_cmd" | grep body)
echo $output_response
while : ; do curl -sL -w "%{http_code} %{url_effective}\\n" http://host -o /dev/null; done
对于编程使用,我使用以下代码:
curlwithcode() {
code=0
# Run curl in a separate command, capturing output of -w "%{http_code}" into statuscode
# and sending the content to a file with -o >(cat >/tmp/curl_body)
statuscode=$(curl -w "%{http_code}" \
-o >(cat >/tmp/curl_body) \
"$@"
) || code="$?"
body="$(cat /tmp/curl_body)"
echo "statuscode : $statuscode"
echo "exitcode : $code"
echo "body : $body"
}
curlwithcode https://api.github.com/users/tj
显示如下信息:
statuscode : 200
exitcode : 0
body : {
"login": "tj",
"id": 25254,
...
}
要获得响应代码和响应:
$ curl -kv https://www.example.org
要得到响应代码:
$ curl -kv https://www.example.org 2>&1 | grep -i 'HTTP/1.1 ' | awk '{print $3}'| sed -e 's/^[ \t]*//'
2>&1:错误存储在输出中,用于解析 Grep:从输出中过滤响应代码行 Awk:从响应代码行中过滤响应代码 Sed:删除前导空白