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

t/06-h2.t  view on Meta::CPAN

    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 )