【问题标题】:LWP::UserAgent - determining source of response code - PERL ModulesLWP::UserAgent - 确定响应代码的来源 - PERL 模块
【发布时间】:2016-06-16 03:45:36
【问题描述】:

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

我的问题是我无法弄清楚如何确定 响应代码是从网络服务器或 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

【问题讨论】:

  • Cross-posted on JustSkins。虽然将问题发布到多个站点并不违反任何规则,但如果您没有在任何地方都清楚地表明您已经这样做了,那就有点破旧了。您可以很容易地让人们继续努力帮助您解决已经在其他地方解决的问题。
  • 哦,相信我,如果我有一个明确的答案,我不会发布这个。
  • 我添加了一个参考链接,指向我也提出这个问题的地方。

标签: perl perl-module


【解决方案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";
 }

【讨论】:

  • definedeq 就足够了。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2021-12-01
    • 1970-01-01
    • 2011-06-02
    • 2015-04-09
    • 2023-03-04
    • 2020-01-11
    • 1970-01-01
    • 2014-05-14
    • 1970-01-01
    相关资源
    最近更新 更多