我使用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状态码在一个命令?
当前回答
-i选项是你想要的:
curl -i http://localhost
在输出中包含协议头(H/F)
或者你可以使用verbose选项:
curl -v http://localhost
-v,——verbose使操作更健谈
其他回答
这对我来说很管用:
curl -Uri 'google.com' | select-object StatusCode
我用过这个:
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
详细模式会告诉你一切
curl -v http://localhost
这里有一些很好的答案,但就像我发现自己想要的OP一样,在脚本环境中,所有的:
服务器返回的任何响应体,而不管响应状态码:有些服务会发送错误细节,例如当响应是错误时,会以JSON形式发送 HTTP响应代码 curl退出状态代码
这很难通过单个curl调用来实现,我正在寻找一个完整的解决方案/示例,因为所需的处理很复杂。
我将其他一些关于多路复用stdout/stderr/return-code的bash方法与这里的一些想法结合起来,得到了以下示例:
{
IFS= read -rd '' out
IFS= read -rd '' http_code
IFS= read -rd '' status
} < <({ out=$(curl -sSL -o /dev/stderr -w "%{http_code}" 'https://httpbin.org/json'); } 2>&1; printf '\0%s' "$out" "$?")
那么结果可以在变量中找到:
echo out $out
echo http_code $http_code
echo status $status
结果:
out { "slideshow": { "author": "Yours Truly", "date": "date of publication", "slides": [ { "title": "Wake up to WonderWidgets!", "type": "all" }, { "items": [ "Why <em>WonderWidgets</em> are great", "Who <em>buys</em> WonderWidgets" ], "title": "Overview", "type": "all" } ], "title": "Sample Slide Show" } }
http_code 200
status 0
脚本通过多路复用输出、HTTP响应代码和以空字符分隔的curl退出状态,然后将它们读入当前shell/脚本。它可以用curl请求进行测试,该请求将返回>=400响应代码,但也会产生输出。
请注意,如果没有-f标志,当服务器返回一个异常的HTTP响应代码,即>=400时,curl将不会返回非零错误代码,并且使用-f标志,服务器输出的错误将被抑制,利用这个标志进行错误检测和处理不吸引。
使用IFS处理的通用读取的学分转到这个答案:https://unix.stackexchange.com/a/430182/45479。
这个命令
curl http://localhost -w ", %{http_code}"
将得到以逗号分隔的正文和状态;你可以把它们分开取出来。
您可以随心所欲地更改分隔符。