正如其他人所指出的,您可以在HEAD请求之前执行GET请求.你应该这样做是为了对服务器礼貌,因为它实际上很容易中止连接,但Web服务器不一定容易中止发送大量数据并在其结束时做一堆工作.
根据您想要的复杂程度,有一些不同的方法可以做到这一点.
您可以发送Accept包含您的请求的标头,该标头仅列出text/html.406 Not Acceptable如果您说您不接受文件的任何内容,那么良好实施的HTTP服务器将返回状态.当然,无论如何,他们可能会发送给你.您也可以根据自己的HEAD要求执行此操作.
使用最新版本的LWP :: UserAgent时,您可以使用处理程序子例程在标题之后和内容正文之前中止请求的其余部分.
use LWP::UserAgent;
use Try::Tiny;
my $ua = LWP::UserAgent->new;
$ua->add_handler( response_header => sub {
my($response, $ua, $h) = @_;
die "Not HTML" unless $response->content_type eq 'text/html';
});
my $url = "http://example.com/foo";
my $html;
my $head_response = $ua->head($url, Accept => "text/html");
if ($head_response->is_success) {
my $get_response = $ua->get($url, Accept => "text/html");
if ($get_response->is_success) {
$html = $get_response->content;
}
}
Run Code Online (Sandbox Code Playgroud)有关处理程序的详细信息,请参阅LWP :: UserAgent文档的"处理程序"部分.
我没有抓住异常抛出或确保在这里仔细处理406响应.我把它作为读者的练习.
| 归档时间: |
|
| 查看次数: |
460 次 |
| 最近记录: |