[EP-tech] Sending out Error Statuses with Error codes
Adam Field
adam at adamfield.net
Tue Jun 26 17:00:40 BST 2018
Hi
I’m working on an API that spits out objects in JSON, and I have a function that handles errors. I can’t seem to get it to behave, and I wonder if anyone can offer me any advice.
sub api_error
{
my ($repo, $code, $message) = @_;
my $r = $repo->request;
$r->status($code);
EPrints::Apache::AnApache::send_status_line( $r, $code );
$r->content_type('application/json');
my $json = JSON->new;
my $content = $json->encode(
{
status => $code,
message => $message
}
);
$r->err_headers_out->{'Content-Length'} = length $content;
# binmode(STDOUT, ":utf8");
# print $content;
return $code;
}
Using CURL to look at the headers and body, I get this:
HTTP/1.1 400 Bad Request
Date: Tue, 26 Jun 2018 15:48:51 GMT
Server: Apache/2.4.7 (Ubuntu)
Content-Length: 120
Connection: close
Content-Type: text/html; charset=iso-8859-1
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
<hr>
<address>Apache/2.4.7 (Ubuntu) Server at sherpaneo-test.sherpa.ac.uk Port 443</address>
</body></html>
If I uncomment the two commented lines, I get this:
HTTP/1.1 200 OK
Date: Tue, 26 Jun 2018 15:48:36 GMT
Server: Apache/2.4.7 (Ubuntu)
Content-Length: 120
Content-Type: application/json
{"message":"unrecognised api key in 'api-key' at /usr/share/eprints3/lib/plugins/SherpaAPI.pm line 470.\n","status":400}
Essentially, if I output anything to STDOUT, something (maybe MOD Perl) switches the status to ‘200 OK’. How can I get the status code from the first version, and the body from the second? Any ideas?
Cheers
--
Adam Field
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.ecs.soton.ac.uk/pipermail/eprints-tech/attachments/20180626/587f4d00/attachment.html
More information about the Eprints-tech
mailing list