Clinton Gormley

NAME

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

VERSION

version 1.20

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::HTTP, 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::HTTP

From Search::Elasticsearch::Role::Cxn

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::HTTP

From Search::Elasticsearch::Role::Cxn

SEE ALSO

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:

AUTHOR

Clinton Gormley <drtech@cpan.org>

COPYRIGHT AND LICENSE

This software is Copyright (c) 2015 by Elasticsearch BV.

This is free software, licensed under:

  The Apache License, Version 2.0, January 2004