Lucas Gonze <[EMAIL PROTECTED]> writes:
> The "lwp-request, GET, HEAD, POST - Simple WWW user agent" utilities
> never display the response body if the response code is an error. For
> RESTful web services this suppresses potential debug information.
You don't state what version of LWP you are using, but
libwww-perl-5.71 (2003-10-14) had this fix:
lwp-request now prints unsuccessful responses in the same way
as successsful ones. The status will still indicate failures.
Based on a patch by Steve Hay <[EMAIL PROTECTED]>.
Didn't that address this concern?
Regards,
Gisle
> Background: I am writing an API for my web app; documentation (out of date
> but enough to get the gist) on what I am doing is at
> http://webjay.org/help/api. The client is expected to be a program, not a
> browser, so I use response status codes to communicate specifics about
> errors and the response body to communicate useful debugging hints. A
> typical error response is:
>
> ...
> HTTP/1.1 409 Conflict
> Content-Type: text/plain
>
> There is already a playlist with this title.
> ...
>
> However, requests made using lwp-request never display the response body
> if there is an error. lwp-request does this:
> if ($response->is_success){
> ...
> } else {
> print STDERR $response->error_as_HTML unless $options{'d'};
> }
>
> And that turns into the boilerplate HTML in HTTP/Response.pm:
> sub error_as_HTML
> {
> my $self = shift;
> my $title = 'An Error Occurred';
> my $body = $self->status_line;
> return <<EOM;
> <HTML>
> <HEAD><TITLE>$title</TITLE></HEAD>
> <BODY>
> <H1>$title</H1>
> $body
> </BODY>
> </HTML>
> EOM
> }
>
> I am expecting clients to be shell scripts using the lwp-request
> utilities, so it's important for the debug messages to be displayed.
>
> The fix: in GET, I have added a -D flag to display the response body even
> if there is an error. This seemed like a good cognate next to -d, which
> always suppresses the response body. Here is the patch, diff'd against my
> local copy of GET, which may not be the most recent:
>
> bash-2.05a$ diff /usr/bin/GET GET
> 282a283
> > 'D', # LG patch -- display response body even on error
> 477a479,482
> > # LG patch to support my added -D flag
> > if( $options{'D'} ){
> > print STDERR $response->content unless $options{'d'};
> > } else {
> 479a485
> > }
>
> - Lucas Gonze