Amazon-SQS-Client
view release on metacpan or search on metacpan
lib/Amazon/SQS/Client.pm view on Meta::CPAN
sub _reportAnyErrors {
########################################################################
my ( $self, $responseBody, $status, $e ) = @_;
my $ex = eval {
my $error = XML::Simple::XMLin($responseBody);
return $responseBody
if !ref $error || !$error->{Error};
#<ErrorResponse xmlns="http://queue.amazonaws.com/doc/2012-11-05/">
# <Error>
# <Code>AWS.SimpleQueueService.NonExistentQueue</Code>
# <Message>The specified queue does not exist for this wsdl version.</Message>
# <Type>Sender</Type>
# </Error>
# <RequestId>1bae4a91-7804-45a5-94b0-c884ddc2f140</RequestId>
#</ErrorResponse>
if ( $error->{Error} ) {
my $requestId = $error->{RequestId};
my $code = $error->{Error}->{Code};
my $message = $error->{Error}->{Message};
return Amazon::SQS::Exception->new(
{ Message => $message,
StatusCode => $status,
ErrorCode => $code,
ErrorType => $error->{Error}->{Type} // 'Unknown',
RequestId => $requestId,
XML => $responseBody
}
);
}
};
return $ex
if ref $ex;
return Amazon::SQS::Exception->new(
{ Message => 'Internal Error',
StatusCode => $status,
ResponseBody => $responseBody,
}
);
}
#
# perform http post
#
########################################################################
sub _httpPost {
########################################################################
my ( $self, $queueUrl, $parameters ) = @_;
my $url = $queueUrl;
my $ua = $self->get_UserAgent;
my $request = HTTP::Request->new( POST => $url );
$request->content_type('application/x-www-form-urlencoded; charset=utf-8');
my $data = $EMPTY;
foreach my $parameterName ( keys %{$parameters} ) {
no warnings 'uninitialized'; ## no critic
$data .= $parameterName . $EQUALS . $self->_urlencode( $parameters->{$parameterName}, 0 );
$data .= $AMPERSAND;
}
chop $data;
$request->content($data);
# sign request here if v4 else, it is done in _addRequiredParameters()
if ( defined $self->get_v4_signer ) {
$self->get_v4_signer->sign($request);
}
$self->set_last_request($request);
my $response = $ua->request($request);
$self->set_last_response($response);
return $response;
}
#
# Add authentication related and version parameters
#
sub _addRequiredParameters {
my ( $self, $parameters, $queueUrl ) = @_;
my $credentials = $self->get_credentials;
my $token = $credentials->get_token;
my $aws_access_key_id = $credentials->get_aws_access_key_id;
my $aws_secret_access_key = $credentials->get_aws_secret_access_key;
$parameters->{AWSAccessKeyId} = $aws_access_key_id;
$parameters->{Timestamp} = $self->_getFormattedTimestamp();
$parameters->{Version} = $self->get_ServiceVersion;
# v2 signing
if ( !defined $self->{_v4_signer} ) {
if ($token) {
$parameters->{SecurityToken} = $token;
}
$parameters->{SignatureVersion} = $self->get_SignatureVersion || '1';
$parameters->{Signature} = $self->_signParameters( $parameters, $queueUrl, $aws_secret_access_key );
}
return $parameters;
}
#
# Computes RFC 2104-compliant HMAC signature for request parameters
# Implements AWS Signature, as per following spec:
( run in 1.503 second using v1.01-cache-2.11-cpan-39bf76dae61 )