LWP :: UserAgent - 确定响应代码的来源 - PERL模块

时间:2016-03-03 01:48:19

标签: perl perl-module

使用LWP :: UserAgent模块时,会向URL发出请求 接收包含响应代码的HTTP :: Response对象 (希望200!)和一个状态行。

我的问题是我无法弄清楚如何判断 响应代码是从Web服务器或LWP :: UserAgent返回的。 例如,我相信如果域名没有解决或你 根本无法连接到主机,LWP :: UserAgent在此报告 形成500代码,与500“内部服务器无法区分 错误“从实际Web服务器报告的代码已启动但是 遇到一些问题。

当通过代理服务器时问题进一步放大,如 现在有三个错误信息的“来源”:

  • 目标网络服务器
  • 代理服务器
  • LWP :: UserAgent库

如何知道500代码是否意味着a)服务器是否已启动 但不高兴,b)代理无法连接到服务器,或c) LWP :: UserAgent无法连接到代理?

我也在这里发布了同样的问题: http://www.justskins.com/forums/lwp-useragent-determining-source-43810.html

2 个答案:

答案 0 :(得分:2)

  

LWP内部生成的错误响应将具有   “客户端警告”标头设置为“内部响应”值。如果你   需要区分这些内部响应与响应a   远程服务器实际生成,您需要测试此标头值。

(来自LWP::UserAgent -> REQUEST-METHODS

答案 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";
 }