linux – Perl / curl如何获取状态代码和响应正文

我正在尝试编写一个简单的perl脚本调用和API,如果状态代码是2xx,则对响应做一些事情.如果它是4xx或5xx,那么做其他事情.

我遇到的问题是我能够获得响应代码(使用自定义写出格式化程序并将输出传递到其他地方)或者我可以得到整个响应和标题.

my $curlResponseCode = `curl -s -o /dev/null -w "%{http_code}" ....`;

只会给我状态代码.

my $curlResponse = `curl -si ...`; 

会给我整个标题加上回复.

我的问题是如何从服务器获取响应主体和http状态代码以一种简洁的格式,允许我将它们分成两个独立的变量.

不幸的是,我不能使用LWP或任何其他单独的库.

提前致谢.
-Spencer

最佳答案

…Will give me the entire header plus the response.

…in a neat format that allows me to separate them into two separate variables.

由于标题和正文仅由空行分隔,因此您可以拆分此行上的内容

 my ($head,$body) = split( m{\r?\n\r?\n},`curl -si http://example.com `,2 );

并从标题获取状态代码

 my ($code) = $head =~m{\A\S+ (\d+)};

您也可以将它组合成一个带有正则表达式的表达式,尽管这可能更难理解:

my ($code,$body) = `curl -si http://example.com` 
      =~m{\A\S+ (\d+) .*?\r?\n\r?\n(.*)}s;

相关文章

文件查找(find) 1 find 简单的说,就是实时查找指定的内容或条件。特点:最新、最快、最准确。 用法:...
非交互式添加分区 方法一 添加/deb/sdb 下的分区,其实位置为1到1000M,第二个分区位置为1001至3000M,...
编译安装httpd 1 去官网下载源码包 为避免非法软件,一定要去官网下载http://www.apache.org httpd-2.4...
gdisk用法 gdisk - InteractiveGUIDpartitiontable (GPT) manipulator GPTfdisk (akagdisk) isatext-mo...
1 一定用快捷键 这里简单的说下几个常用的快捷按键。 1.1 移动光标快捷键 Crtl + a 光标回到命令行...
bash shell中测试命令 test命令提供了if-than语句中测试不同条件的途径。如果test命令中列出的条件成立...