NAME
   Search::Elasticsearch::Cxn::NetCurl - A Cxn implementation which uses
   libcurl via Net::Curl

VERSION
   version 6.00

DESCRIPTION
   Provides an HTTP Cxn class based on Net::Curl. The "NetCurl" Cxn class
   is very fast and uses persistent connections but requires XS and
   "libcurl".

   This class does Search::Elasticsearch::Role::Cxn, whose documentation
   provides more information.

CONFIGURATION
 "connect_timeout"
   Unlike most HTTP backends, Net::Curl accepts a separate
   "connect_timeout" parameter, which defaults to 2 seconds but can be
   reduced in an environment with low network latency.

 Inherited configuration
   From Search::Elasticsearch::Role::Cxn

   *   node

   *   max_content_length

   *   deflate

   *   deflate

   *   request_timeout

   *   ping_timeout

   *   dead_timeout

   *   max_dead_timeout

   *   sniff_request_timeout

   *   sniff_timeout

   *   handle_args

   *   handle_args

SSL/TLS
   Search::Elasticsearch::Cxn::NetCurl does no validation of remote hosts
   by default.

   This behaviour can be changed by passing the "ssl_options" parameter
   with any options accepted by Net::Curl (see
   <http://curl.haxx.se/libcurl/c/curl_easy_setopt.html>).

   For instance, to check that the remote host has a trusted certificate,
   and to avoid man-in-the-middle attacks, you could do the following:

       use Search::Elasticsearch;
       use Net::Curl::Easy qw(
           CURLOPT_CAINFO
       );

       my $es = Search::Elasticsearch->new(
           cxn   => 'NetCurl',
           nodes => [
               "https://node1.mydomain.com:9200",
               "https://node2.mydomain.com:9200",
           ],
           ssl_options => {
               CURLOPT_CAINFO()  => '/path/to/cacert.pem'
           }
       );

   If the remote server cannot be verified, an Search::Elasticsearch::Error
   will be thrown.

   If you want your client to present its own certificate to the remote
   server, then use:

       use Net::Curl::Easy qw(
           CURLOPT_CAINFO
           CURLOPT_SSLCERT
           CURLOPT_SSLKEY
       );

       my $es = Search::Elasticsearch->new(
           cxn   => 'NetCurl',
           nodes => [
               "https://node1.mydomain.com:9200",
               "https://node2.mydomain.com:9200",
           ],
           ssl_options => {
               CURLOPT_CAINFO()      => '/path/to/cacert.pem'
               CURLOPT_SSLCERT()     => '/path/to/client.pem',
               CURLOPT_SSLKEY()      => '/path/to/client.pem',
           }
       );

METHODS
 "perform_request()"
       ($status,$body) = $self->perform_request({
           # required
           method      => 'GET|HEAD|POST|PUT|DELETE',
           path        => '/path/of/request',
           qs          => \%query_string_params,

           # optional
           data        => $body_as_string,
           mime_type   => 'application/json',
           timeout     => $timeout
       });

   Sends the request to the associated Elasticsearch node and returns a
   $status code and the decoded response $body, or throws an error if the
   request failed.

 Inherited methods
   From Search::Elasticsearch::Role::Cxn

   *   scheme()

   *   is_https()

   *   userinfo()

   *   default_headers()

   *   max_content_length()

   *   build_uri()

   *   host()

   *   port()

   *   uri()

   *   is_dead()

   *   is_live()

   *   next_ping()

   *   ping_failures()

   *   mark_dead()

   *   mark_live()

   *   force_ping()

   *   pings_ok()

   *   sniff()

   *   process_response()

SEE ALSO
   *   Search::Elasticsearch::Role::Cxn

   *   Search::Elasticsearch::Cxn::Hijk

   *   Search::Elasticsearch::Cxn::LWP

   *   Search::Elasticsearch::Cxn::HTTPTiny

BUGS
   This is a stable API but this implemenation is new. Watch this space for
   new releases.

   If you have any suggestions for improvements, or find any bugs, please
   report them to
   <http://github.com/elasticsearch/elasticsearch-perl/issues>. I will be
   notified, and then you'll automatically be notified of progress on your
   bug as I make changes.

SUPPORT
   You can find documentation for this module with the perldoc command.

       perldoc Search::Elasticsearch::Cxn::NetCurl

   You can also look for information at:

   *   GitHub

       <http://github.com/elasticsearch/elasticsearch-perl>

   *   CPAN Ratings

       <http://cpanratings.perl.org/d/Search::Elasticsearch::Cxn::NetCurl>

   *   Search MetaCPAN

       <https://metacpan.org/module/Search::Elasticsearch::Cxn::NetCurl>

   *   IRC

       The #elasticsearch <irc://irc.freenode.net/elasticsearch> channel on
       "irc.freenode.net".

   *   Mailing list

       The main Elasticsearch mailing list
       <http://www.elastic.co/community>.

AUTHOR
   Clinton Gormley <[email protected]>

COPYRIGHT AND LICENSE
   This software is Copyright (c) 2017 by Elasticsearch BV.

   This is free software, licensed under:

     The Apache License, Version 2.0, January 2004