[Catalyst] $c->req->body oddity

Jonathan Rockway jon at jrock.us
Sat Jan 26 15:47:35 GMT 2008


* Ian Docherty <catalyst at iandocherty.com> writes:

> I am sending a POST to a Catalyst app and according to the documention
> I expected the request body to
> contain the data I sent. Instead it holds a filename in the tmp
> directory which contains the document. Is
> this an expected behaviour?
>
> e.g. in my test script
>
> my $request = HTTP::Request->new(POST => 'http://linux:3000/svc/to/1001');
> $request->content_type('text/text');
> $request->content('THIS IS THE STRING');
> my $response = $ua->request($request);

Basically, HTTP::Body assumes you are sending your content as
application/octet-stream, since it's not multipart/form-data or
application/x-www-form-urlencoded (the two cases that it treats
specially).

Since file uploads are application/octet-stream, we put the data into
a file.  Maybe it would be better to keep it in memory unless
Content-Length exceeds a certain length, but the current behavior is
consistent and reliable, so I don't see why we should change it.  It's
really not that confusing.

Finally, the "string" that you see in $c->req->body is actually an
IO::File object, so you can easily suck the file in if the need
arises.

Regards,
Jonathan Rockway



More information about the Catalyst mailing list