使用LWP :: UserAgent模块时,会向URL发出请求 接收包含响应代码的HTTP :: Response对象 (希望200!)和一个状态行。
我的问题是我无法弄清楚如何判断 响应代码是从Web服务器或LWP :: UserAgent返回的。 例如,我相信如果域名没有解决或你 根本无法连接到主机,LWP :: UserAgent在此报告 形成500代码,与500“内部服务器无法区分 错误“从实际Web服务器报告的代码已启动但是 遇到一些问题。
当通过代理服务器时问题进一步放大,如 现在有三个错误信息的“来源”:
如何知道500代码是否意味着a)服务器是否已启动 但不高兴,b)代理无法连接到服务器,或c) LWP :: UserAgent无法连接到代理?
我也在这里发布了同样的问题: http://www.justskins.com/forums/lwp-useragent-determining-source-43810.html
答案 0 :(得分:2)
LWP内部生成的错误响应将具有 “客户端警告”标头设置为“内部响应”值。如果你 需要区分这些内部响应与响应a 远程服务器实际生成,您需要测试此标头值。
答案 1 :(得分:1)
#!/usr/bin/perl
use strict;
use LWP::UserAgent;
use HTTP::Request;
use IO::Socket::SSL;
my $ua = LWP::UserAgent->new(
ssl_opts => {
SSL_verify_mode => IO::Socket::SSL::SSL_VERIFY_NONE
}
);
my $request = HTTP::Request->new(GET => "www.example.com");
my $response = $ua->request($request);
my $clientWarning = $response->header("Client-Warning");
if(defined $clientWarning and length($clientWarning) != 0) {
if($clientWarning =~ /Internal response/) {
print "$server UNAVAILABLE";
}
} else {
print "server AVAILABLE";
}