2016-03-03 1 views
2

При использовании модуля LWP :: UserAgent запрашивается URL-адрес, а получает объект HTTP :: Response, содержащий код ответа (надеюсь, 200 !) и строку состояния.LWP :: UserAgent - определение источника кода ответа - Модули PERL

Моя проблема заключается в том, что я не могу понять, как определить, был ли возвращен код ответа с веб-сервера или из LWP :: UserAgent. Например, я считаю, что если доменное имя не разрешилось или вы просто не можете подключиться к хосту, LWP :: UserAgent сообщает об этом в форме код 500, который неотличим от 500-внутреннего сервера Ошибка «код, указанный с фактического веб-сервера, который находится вверх, но испытывает некоторые проблемы.

Проблема еще больше усиливается при переходе через прокси-сервер, так как есть теперь три возможных «источники» сообщение об ошибке:

  • целевой веб-сервер
  • прокси-сервер
  • LWP :: UserAgent библиотека

Как один должен знать, если 500 код означает) сервер до но несчастны, б) прокси не удалось подключиться к серверу, или c) LWP :: UserAgent не смог подключиться к прокси-серверу?

Я отправил тот же самый вопрос здесь также: 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 сгенерированные внутри будет иметь «Клиент-Warning» заголовок устанавливается на значение «Внутренний ответ». Если вам нужно отличить эти внутренние ответы от ответов, которые действительно генерирует удаленный сервер , вам нужно проверить это значение заголовка.

(от 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' достаточно. –