2016-03-03 74 views
2

当使用LWP :: UserAgent模块时,向模块发出请求,并且 收到一个HTTP :: Response对象,其中包含响应代码 (希望为200 !)和一个状态行。LWP :: UserAgent - 确定响应代码的来源 - PERL模块

我的问题是,我不知道如何确定 响应代码是从Web服务器还是从LWP :: UserAgent返回。 例如,我认为如果域名无法解析或者您无法连接到主机,则LWP :: UserAgent会以 的形式报告这个500代码,这与500“内部服务器 错误无法区分“代码从实际的网络服务器报告出来,但 遇到一些问题。

通过代理服务器去的时候,作为 现在有一个错误信息的三种可能的“源”问题被进一步放大:

  • 目标web服务器
  • 代理服务器
  • 的LWP :: UserAgent的库

之一是如何应该知道,如果500代码装置)服务器启动 但不快乐,二)代理无法连接到服务器,或c) LWP :: UserAgent无法连接到代理?

我在这里贴了同样的问题也:该LWP内部产生将有 “客户警告”标头的值设置为“内部响应” http://www.justskins.com/forums/lwp-useragent-determining-source-43810.html

+1

[交张贴在JustSkins](http://www.justskins.com/forums/lwp-useragent-determining-source-43810.html)。尽管将问题发布到多个网站并不违反任何规则,但如果您在任何地方都未明确说明问题,则会有些破败。你很容易让人们继续努力帮助你解决已经在其他地方解决的问题。 – Borodin

+0

哦,相信我,如果我有一个明确的答案,不会发布这个。 – ilce

+0

我添加了一个指向我也提出这个问题的地方的引用链接。 – ilce

回答

2

错误响应。如果 需要将这些内部响应与远程服务器实际生成的响应区分开来,则需要测试此标头值。

(从LWP::UserAgent -> REQUEST-METHODS

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"; 
} 
+0

'defined'和'eq'就足够了。 –

相关问题