让 curl 输出 HTTP 状态代码?

让 curl 输出 HTTP 状态代码?

curl在 Linux 上使用命令行发出 HTTP 请求。响应主体打印到标准输出,这很好,但我无法从手册页中看到如何让 curl 从响应中打印 HTTP 状态代码(404、403 等)。这可能吗?

答案1

这应该对你有用如果Web 服务器能够响应 HEAD 请求(这不会执行请求GET):

curl -I http://www.example.org

另外,为了让 cURL 遵循重定向(3xx 状态),请添加-L

答案2

更具体的打印方法只是HTTP 状态代码大致如下:

curl -s -o /dev/null -w "%{http_code}" http://www.example.org/

在脚本中使用起来更容易,因为它不需要任何解析:-)

可以添加该参数-I来提高响应加载性能。这会将调用更改为HEAD仅获取响应开销而不获取主体的调用。

笔记: %{http_code}返回 HTTP 有效负载的第一行(文档页面-w上该选项的可用变量curl

IE:

curl -s -o /dev/null -I -w "%{http_code}" http://www.example.org/

答案3

除了所有标题之外,您还可以通过执行以下操作来打印状态代码:

curl -i http://example.org

其优点在于它也能很好地-i工作。-X POST

答案4

如果要将 HTTP 状态代码捕获到变量中,但仍将内容重定向到 STDOUT,则必须创建两个 STDOUT。您可以使用进程替换 >()命令替换 $()

3首先,使用 为当前进程的 STDOUT创建一个文件描述符exec 3>&1

然后,使用 curl 的-o选项通过命令替换将响应内容重定向到临时 fifo,然后在该命令替换内,使用 将输出重定向回当前进程 STDOUT3文件描述符-o >(cat >&3)

把所有内容放在一起bash 3.2.57(1)-release(标准macOS):

# creates a new file descriptor 3 that redirects to 1 (STDOUT)
exec 3>&1 
# Run curl in a separate command, capturing output of -w "%{http_code}" into HTTP_STATUS
# and sending the content to this command's STDOUT with -o >(cat >&3)
HTTP_STATUS=$(curl -w "%{http_code}" -o >(cat >&3) 'http://example.com')

/bin/sh请注意,这在以下情况下不起作用:SamK 在下面的评论中指出

相关内容