#!/usr/bin/perl -l
use strict;
use warnings;
use LWP::UserAgent;
my $ua = new LWP::UserAgent;
my $result = $ua->get("http://example.com/");
print $result;
print "HTTP code: ".$result->code;
$result
не будет отвечать на обычный текст, но HTTP::Response object. Выход выше сценария:
HTTP::Response=HASH(0x23dbfc8)
HTTP code: 200
Этот объект имеет методы (как ->code
, чтобы получить код состояния HTTP). В документации говорится (укороченный):
$ r-> заголовок ($ поле)
Это используется для получения значения заголовка и наследуется от HTTP::Headers через HTTP::Message. См. HTTP::Headers для получения дополнительной информации и другие аналогичные методы, которые могут использоваться для доступа к заголовкам.
HTTP::Headers
сам имеет метод header_field_names
:
$ h-> header_field_names
Возвращает список различных имен полей, присутствующих в заголовке . Имена полей имеют случай, предложенный спецификацией HTTP, и имена возвращаются в рекомендуемом порядке «Хорошая практика».
В скалярном контексте возвращают число различных имен полей.
Ваш сценарий может легко получить запрашиваемую информацию:
for my $header_name ($result->header_field_names) {
print $header_name.": ".$result->header($header_name);
}
который выводит:
Cache-Control: max-age=604800
Connection: close
Date: Thu, 28 Apr 2016 05:40:52 GMT
ETag: "359670651+ident"
Server: ECS (iad/182A)
Vary: Accept-Encoding
Content-Length: 1270
Content-Type: text/html
Expires: Thu, 05 May 2016 05:40:52 GMT
Last-Modified: Fri, 09 Aug 2013 23:54:35 GMT
Client-Date: Thu, 28 Apr 2016 05:40:52 GMT
Client-Peer: 2606:2800:220:1:248:1893:25c8:1946:80
Client-Response-Num: 1
Title: Example Domain
X-Cache: HIT
X-Ec-Custom-Error: 1
X-Meta-Charset: utf-8
X-Meta-Viewport: width=device-width, initial-scale=1
$result->header($header_name)
также полезно, чтобы получить одно значение заголовка для известного имени заголовка.Скажем, из хотят иметь ETag ответа:
print $result->header('ETag');
HTTP::Headers
также имеет метод ->as_string
, но он переписывается ->as_string
методом из HTTP::Response
. Но HTTP::Message
имеет два решения:
$ MESS-> заголовки
Возвращает встроенный HTTP :: Headers объекта.
Вы могли ходить, хотя объекты, чтобы получить HTTP заголовки, как одну строку, делая
print $result->headers->as_string;
, который выводит:
Cache-Control: max-age=604800
Connection: close
Date: Thu, 28 Apr 2016 05:47:54 GMT
ETag: "359670651+ident"
Server: ECS (iad/182A)
Vary: Accept-Encoding
Content-Length: 1270
Content-Type: text/html
Expires: Thu, 05 May 2016 05:47:54 GMT
Last-Modified: Fri, 09 Aug 2013 23:54:35 GMT
Client-Date: Thu, 28 Apr 2016 05:47:54 GMT
Client-Peer: 2606:2800:220:1:248:1893:25c8:1946:80
Client-Response-Num: 1
Title: Example Domain
X-Cache: HIT
X-Ec-Custom-Error: 1
X-Meta-Charset: utf-8
X-Meta-Viewport: width=device-width, initial-scale=1
Второе решение:
$ бардак -> headers_as_string $ mess-> headers_as_string ($ eol)
Вызвать метод as_string() для заголовков сообщения.
Попробуйте
print $result->headers_as_string;
и вы получите точно такой же результат, как и раньше.