SYNOPSIS

     use Perinci::Access::HTTP::Client;
     my $pa = Perinci::Access::HTTP::Client->new;
    
     ## perform Riap requests
    
     # list all functions in package
     my $res = $pa->request(list => 'http://localhost:5000/api/',
                            {uri=>'/Some/Module/', type=>'function'});
     # -> [200, "OK", ['/Some/Module/mult2', '/Some/Module/mult2']]
    
     # call function
     $res = $pa->request(call => 'http://localhost:5000/api/',
                         {uri=>'/Some/Module/mult2', args=>{a=>2, b=>3}});
     # -> [200, "OK", 6]
    
     # get function metadata
     $res = $pa->request(meta => 'http://localhost:5000/api/',
                         {uri=>'/Foo/Bar/multn'});
     # -> [200, "OK", {v=>1.1, summary=>'Multiple many numbers', ...}]
    
     # pass HTTP credentials (via object attribute)
     my $pa = Perinci::Access::HTTP::Client->new(user => 'admin', password=>'123');
     my $res = $pa->request(call => '...', {...});
     # -> [200, "OK", 'result']
    
     # HTTP credentials can also be passed on a per-request basis
     my $pa = Perinci::Access::HTTP::Client->new();
     my $res = $pa->request(call => '...', {...}, {user=>'admin', password=>'123'});
    
     ## parse server URL
     $res = $pa->parse_url("https://cpanlists.org/api/"); # {proto=>"https", path=>"/App/cpanlists/Server/"}

ATTRIBUTES

      * realm => STR

      For HTTP basic authentication. Defaults to "restricted area" (this is
      the default realm used by Plack::Middleware::Auth::Basic).

      * user => STR

      For HTTP basic authentication. Default will be taken from environment
      PERINCI_HTTP_USER.

      * password => STR

      For HTTP basic authentication. Default will be taken from environment
      PERINCI_HTTP_PASSWORD.

      * ssl_cert_file => STR

      Path to SSL client certificate. Default will be taken from
      environment SSL_CERT_FILE.

      * ssl_cert_file => STR

      Path to SSL CA certificate. Default will be taken from environment
      SSL_CA_FILE.

DESCRIPTION

    This class implements Riap::HTTP client.

METHODS

 PKG->new(%attrs) => OBJ

    Instantiate object. Known attributes:

      * retries => INT (default 2)

      Number of retries to do on network failure. Setting it to 0 will
      disable retries.

      * retry_delay => INT (default 3)

      Number of seconds to wait between retries.

      * log_level => INT (default 0 or from environment)

      Will be fed into Riap request key 'loglevel' (if >0). Note that some
      servers might forbid setting log level.

      If TRACE environment variable is true, default log_level will be set
      to 6. If DEBUG, 5. If VERBOSE, 4. If quiet, 1. Else 0.

      * log_callback => CODE

      Pass log messages from the server to this subroutine. If not
      specified, log messages will be "rethrown" into Log::ger loggers
      (e.g. log_warn(), log_debug(), etc).

 $pa->request($action => $server_url[, \%extra_keys[, \%client_opts]]) =>
 $res

    Send Riap request to $server_url. Note that $server_url is the HTTP URL
    of Riap server. You will need to specify code entity URI via uri key in
    %extra_keys.

    %extra_keys is optional and contains additional Riap request keys
    (except action, which is taken from $action).

    %client_opts is optional and contains additional information, like user
    (HTTP authentication user, overrides one in object attribute), password
    (HTTP authentication user, overrides one in object attribute).

 $pa->parse_url($server_url[, \%client_opts]) => HASH

ENVIRONMENT

    PERINCI_HTTP_USER.

    PERINCI_HTTP_PASSWORD.

    SSL_CERT_FILE, SSL_CA_FILE.

FAQ

 How do I connect to a HTTP server that listens on a Unix socket?

    This class can switch to using LWP::Protocol::http::SocketUnixAlt when
    it detects that the server is on a Unix socket, using this syntax
    (notice the single instead of double slash after http:):

     http:/path/to/unix.sock//uri

 How do I connect to an HTTPS server without a "real" SSL certificate?

    Since this module is using LWP, you can set environment variable
    PERL_LWP_SSL_VERIFY_HOSTNAME to 0. See LWP for more details.

SEE ALSO

    Perinci::Access::HTTP::Server

    Riap, Rinci

