in reply to HTTP::Request
The header argument is only optional when the content is omitted. Fortunately, you can use undef for the header argument:
my $request = HTTP::Request->new(POST => 'http://...', undef, [ ... ]) [download]