in lib/Search/Elasticsearch/Cxn/NetCurl.pm [52:134]
sub perform_request {
#===================================
my ( $self, $params ) = @_;
my $uri = $self->build_uri($params);
my $method = $params->{method};
my $handle = $self->handle;
$handle->reset;
# $handle->setopt( CURLOPT_VERBOSE, 1 );
$handle->setopt( CURLOPT_HEADER, 0 );
$handle->setopt( CURLOPT_TCP_NODELAY, 1 );
$handle->setopt( CURLOPT_URL, $uri );
$handle->setopt( CURLOPT_CUSTOMREQUEST, $method );
$handle->setopt( CURLOPT_NOBODY, 1 ) if $method eq 'HEAD';
$handle->setopt( CURLOPT_CONNECTTIMEOUT_MS, $self->connect_timeout * 1000 );
$handle->setopt( CURLOPT_TIMEOUT_MS,
1000 * ( $params->{timeout} || $self->request_timeout ) );
my %headers = %{ $self->default_headers };
my $data = $params->{data};
if ( defined $data ) {
$headers{'Content-Type'} = $params->{mime_type};
$headers{'Expect'} = '';
$headers{'Content-Encoding'} = $params->{encoding}
if $params->{encoding};
$handle->setopt( CURLOPT_POSTFIELDS, $data );
$handle->setopt( CURLOPT_POSTFIELDSIZE, length $data );
}
$handle->setopt( CURLOPT_HTTPHEADER,
[ map { "$_: " . $headers{$_} } keys %headers ] )
if %headers;
my %opts = %{ $self->handle_args };
if ( $self->is_https ) {
if ( $self->has_ssl_options ) {
%opts = ( %opts, %{ $self->ssl_options } );
}
else {
%opts = (
%opts,
( CURLOPT_SSL_VERIFYPEER() => 0,
CURLOPT_SSL_VERIFYHOST() => 0
)
);
}
}
for ( keys %opts ) {
$handle->setopt( $_, $opts{$_} );
}
my $content = my $head = '';
$handle->setopt( CURLOPT_WRITEDATA, \$content );
$handle->setopt( CURLOPT_HEADERDATA, \$head );
my ( $code, $msg, $headers );
try {
$handle->perform;
( undef, undef, $code, $msg, $headers )
= parse_http_response( $head, HEADERS_AS_HASHREF );
}
catch {
$code = 509;
$msg = ( 0 + $_ ) . ": $_";
$msg . ", " . $handle->error
if $handle->error;
undef $content;
};
return $self->process_response(
$params, # request
$code, # code
$msg, # msg
$content, # body
$headers # headers
);
}