views:

289

answers:

2

I'm developing a RESTful API and I wrote a mod_perl2 handler that takes care of the request.

My handler deals with error codes by setting $r->status($http_code) and return $http_code;

Everything is fine, except a little problem: when my http_code is different than 200 (for instance 404), apache appends a default HTML error document to my own generated response.

For instance:

GET /foo

Gives:

$VAR1 = bless( {
                 'status' => 404,
                 'data' => {},
                 'message' => 'Resource not found for foo'
               }, 'My::Response' );
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /foo was not found on this server.</p>
<p>Additionally, a 404 Not Found
error was encountered while trying to use an ErrorDocument to handle the request.</p>
<hr>
<address>Apache/2.0.54 (Fedora) Server at localhost Port 80</address>
</body></html>

How do I get rid of this apache generated HTML?

UPDATE: My fault. My mod_perl2 handler was returning a HTTP_* code instead of Apache2::Const::OK.

+1  A: 

See Apache2::Response. I do not have time to experiment right now, but that should work.

Sinan Ünür
That's the idea, but I've got this error from apache:ErrorDocument takes two arguments, Change responses for HTTP errorsAny mean to deactivate the apache error documents? I don't think this is a problem since the return code is kept. Some browser choose to display their own error documents instead of apache ones for instance.
jeje
A: 

Are you asking how to send no message body in your response?

If you want something other than what apache is going to do for you, you need to handle the request yourself. What does the rest of your handler look like? Posting code keeps us from guessing what you are doing.

The return value from your handler lets apache know if you handled the request yourself or if it needs to do something more on your behalf. I'm guessing that you're doing the latter.

brian d foy