Fetch
view release on metacpan or search on metacpan
lib/Fetch/Headers.pm view on Meta::CPAN
__END__
=head1 NAME
Fetch::Headers - ordered, case-insensitive, multi-valued HTTP headers
=head1 SYNOPSIS
my $h = $res->headers; # a Fetch::Headers
my $ct = $h->get('content-type'); # first value, case-insensitive
my @sc = $h->get_all('set-cookie'); # every value, in order
my $req = Fetch::Headers->new(Accept => 'application/json');
$req->add('X-Trace' => 'a');
$req->add('X-Trace' => 'b'); # repeatable header kept twice
# still behaves as the old [k, v, k, v, ...] arrayref
my @flat = @$h;
=head1 DESCRIPTION
my $res = $ua->get("$base/f0", tls_verify => 0)->get;
is($res->status, 200, 'h2 GET status 200');
is($res->content, 'body-of/f0', 'h2 body delivered');
is($res->header('x-proto'), 'HTTP/2',
'server saw the request as HTTP/2 (ALPN)');
}
# ---- header delivery over h2 ---------------------------------------------
{
my $res = $ua->get("$base/f1", tls_verify => 0)->get;
is($res->header('content-type'), 'text/plain',
'h2 response carries headers');
}
# ---- many concurrent h2 requests all resolve, uncrossed ------------------
{
my @f = map { $ua->get("$base/f$_", tls_verify => 0) } 1 .. 5;
Fetch::Future->needs_all(@f)->get;
is_deeply([ map { $_->get->status } @f ], [ (200) x 5 ],
'five concurrent h2 requests all 200');
is_deeply([ map { $_->get->content } @f ],
t/12-headers.t view on Meta::CPAN
# ---- over the wire -------------------------------------------------------
my $ua = Fetch->new;
{
my $res = $ua->get("$base/")->get;
isa_ok($res->headers, 'Fetch::Headers', 'response headers object');
is_deeply([ $res->headers->get_all('set-cookie') ], [ 'a=1', 'b=2' ],
'repeated Set-Cookie preserved via get_all');
is(scalar(@{ $res->headers }), 10, 'still an arrayref underneath (5 fields)');
is($res->header('content-type'), 'text/plain', 'header() delegates to get');
}
is($ua->get("$base/", headers => { 'X-Trace' => 'h' })->get->content,
'traces=h', 'request headers from a hashref');
is($ua->get("$base/", headers => [ 'X-Trace' => 'a', 'X-Trace' => 'b' ])->get->content,
'traces=a,b', 'request headers from an arrayref keep both values');
{
my $H = Fetch::Headers->new;
$H->add('X-Trace' => 'x');
$H->add('X-Trace' => 'y');
( run in 0.815 second using v1.01-cache-2.11-cpan-800906f7e73 )