The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

HTTP::Tiny - A small, simple, correct HTTP/1.1 client

VERSION

version 0.006

SYNOPSIS

    use HTTP::Tiny;

    my $response = HTTP::Tiny->new->get('http://example.com/');

    die "Failed!\n" unless $response->{success};

    print "$response->{status} $response->{reason}\n";

    while (my ($k, $v) = each %{$response->{headers}}) {
        for (ref $v eq 'ARRAY' ? @$v : $v) {
            print "$k: $_\n";
        }
    }

    print $response->{content} if length $response->{content};

DESCRIPTION

This is a very simple HTTP/1.1 client, designed primarily for doing simple GET requests without the overhead of a large framework like LWP::UserAgent.

It is more correct and more complete than HTTP::Lite. It supports proxies (currently only non-authenticating ones) and redirection. It also correctly resumes after EINTR.

METHODS

new

    $http = HTTP::Tiny->new( %attributes );

This constructor returns a new HTTP::Tiny object. Valid attributes include:

  • agent

    A user-agent string (defaults to 'HTTP::Tiny/$VERSION')

  • default_headers

    A hashref of default headers to apply to requests

  • max_redirect

    Maximum number of redirects allowed (defaults to 5)

  • max_size

    Maximum response size (only when not using a data callback). If defined, responses larger than this will die with an error message

  • proxy

    URL of a proxy server to use

  • timeout

    Request timeout in seconds (default is 60)

get

    $response = $http->get($url);
    $response = $http->get($url, \%options);

Executes a GET request for the given URL. Internally, it just calls request() with 'GET' as the method. See request() for valid options and a description of the response.

mirror

    $response = $http->mirror($url, $file, \%options)
    if ( $response->{success} ) {
        print "$file is up to date\n";
    }

Executes a GET request for the URL and saves the response body to the file name provided. If the file already exists, the request will includes an If-Modified-Since header with the modification timestamp of the file. You may specificy a different If-Modified-Since header yourself in the $options->{headers} hash.

The success field of the response will be true if the status code is 2XX or 304 (unmodified).

If the file was modified and the server response includes a properly formatted Last-Modified header, the file modification time will be updated accordingly.

request

    $response = $http->request($method, $url);
    $response = $http->request($method, $url, \%options);

Executes an HTTP request of the given method type ('GET', 'HEAD', 'PUT', etc.) on the given URL. A hashref of options may be appended to modify the request.

Valid options are:

  • headers

    A hashref containing headers to include with the request

  • content

    A scalar to include as the body of the request OR a code reference that will be called iteratively to produce the body of the response

  • data_callback

    A code reference that will be called with chunks of the response body

If the content option is a code reference, it will be called iteratively to provide the content body of the request. It should return the empty string or undef when the iterator is exhausted.

If the data_callback option is provided, it will be called iteratively with a chunk of response body data as the sole argument until the entire response body is received.

The response method returns a hashref containing the response. The hashref will have the following keys:

  • success

    Boolean indicating whether the operation returned a 2XX status code

  • status

    The HTTP status code of the response

  • reason

    The response phrase returned by the server

  • content

    The body of the response. If the response does not have any content or if a data callback is provided to consume the response body, this will be the empty string

  • headers

    A hashref of header fields. All header field names will be normalized to be lower case. If a header is repeated, the value will be an arrayref; it will otherwise be a scalar string containing the value

On an exception during the execution of the request, the status field will contain 599, and the content field will contain the text of the exception.

AUTHORS

  • Christian Hansen <chansen@cpan.org>

  • David Golden <dagolden@cpan.org>

COPYRIGHT AND LICENSE

This software is copyright (c) 2011 by Christian Hansen.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.