[dancer-users] "Route exception: Bad Content-Length: maybe client disconnect?" with JSON POST and request->content

Lennart Hengstmengel lennart at farenji.net
Fri Jul 22 13:20:24 BST 2016


Hi Daniel,

Thanks for your reply. I am doing nothing myself with the content 
length, indeed I am using HTTP::Request::Common to handle everything.

Here's the test script inline:


#!/usr/bin/env perl

package MyApp;

use strict;
use warnings;
use Dancer2;
use Data::Dumper;

set serializer => 'JSON';

any '/ok' => sub {
     return {};
};

any '/nok' => sub {
     my $a = request->content;
     #print STDERR Dumper $a;
     #print STDERR Dumper { params('body') };
     return {};
};

# dance();


package main;

use strict;
use warnings;
use Test::More;
use Plack::Test;
use HTTP::Request::Common;
use JSON;

my $app = MyApp->to_app;
isa_ok( $app, 'CODE' );

test_psgi $app, sub {
     my $cb = shift;

     my $res = $cb->( GET '/ok' );
     ok($res->code == 200, "GET route without request->content call");

     $res = $cb->( GET '/nok' );
     ok($res->code == 200, "GET route with request->content call");

     my $json_data = { foo => 'bar' };
     $res = $cb->(
         POST '/ok',
         'Content-Type'    => 'application/json',
         Content => JSON::to_json($json_data),
     );
     ok($res->code == 200, "JSON POST to route without request->content 
call");

     $res = $cb->(
         POST '/nok',
         'Content-Type'    => 'application/json',
         Content => JSON::to_json($json_data),
     );
     # this test fails.
     ok($res->code == 200, "JSON POST to route with request->content call");

};

done_testing;


1;



On 22-07-16 13:44, Daniel Perrett wrote:
> I'm afraid I didn't get the attachment, so apologies if this guess is out, but are you setting the content-length on your HTTP::Request? If not, have a look at how HTTP::Request::Common does it - https://metacpan.org/source/ETHER/HTTP-Message-6.11/lib/HTTP/Request/Common.pm#L97 - (or indeed just use HTTP::Request::Common itself).
>
> Daniel
>
> -----Original Message-----
> From: dancer-users [mailto:dancer-users-bounces at dancer.pm] On Behalf Of Lennart Hengstmengel
> Sent: 22 July 2016 12:38
> To: dancer-users at dancer.pm
> Subject: [dancer-users] "Route exception: Bad Content-Length: maybe client disconnect?" with JSON POST and request->content
>
> Hi all,
>
> I'm running into an issue that looks like a bug, but I'm unsure where it comes from. Could be in Dancer2, but maybe in Plack::Request, or even in Plack::Test, HTTP::Request, or somewhere else. I'm kinda lost in the woods. I was hoping that a mind greater than mine can shed some light on this.
>
> I get an error "Route exception: Bad Content-Length: maybe client disconnect? (xx bytes remaining)" where xx is the total content length of the request body.
> But only under the following conditions:
>
> - (valid) JSON POST to a Dancer2 app
> - the app is configured with serializer = JSON
> - in the route there's a call to: request->content
> - using Plack::Test and HTTP::Request
>
> Attached is a minimal test to demonstrate the issue. Test no 5 fails.
>
> I cannot reproduce this issue when using f.e. curl, this call works without errors:
>
>       curl --data-binary '{ "foo": "123" }' --header 'Content-type:
> application/json' http://localhost:3000/nok
>
> I am using the latest version of Dancer (0.200003) and also latest CPAN versions of Plack and HTTP::Request.
>
> Any insights?
>
> Thanks,
> Lennart
>
>
>
>
> _______________________________________________
> dancer-users mailing list
> dancer-users at dancer.pm
> http://lists.preshweb.co.uk/mailman/listinfo/dancer-users
>



More information about the dancer-users mailing list