I am using Perl with WWW::Mechanize
to download an MP3 file which is served in chunks of 400KB (around 20 seconds).
When I save the data with binmode
on the file handle, appending each chunk as it arrives, only the first chunk is played correctly; the rest is not.
When I don't use binmode
I can't play the whole file -- it plays but sounds interesting!
This is my program
use WWW::Mechanize;
$agent = WWW::Mechanize->new( cookie_jar => {} );
@links = ("http://thehost.com/chunk1","http://thehost.com/chunk2","http://thehost.com/chunk3");
foreach (@links){
$agent->get($_);
my $filename = 'test.mp3';
open(my $fh, '>>', $filename) or die "Could not open file '$filename' $!";
binmode $fh;
print $fh $agent->content;
close $fh;
}
What am I doing wrong?
Update
These are the HTTP headers that are being returned.
Cache-Control: public
Connection: close
Date: Tue, 28 Oct 2014 18:38:37 GMT
Pragma:
Server: Apache
Content-Length: 409600
Content-Type: application/octet-stream
Expires: Sat, 24 Oct 2015 12:08:00 GMT
Access-Control-Allow-Origin: *
Client-Date: Tue, 28 Oct 2014 18:38:28 GMT
Client-Peer: **.**.***.***:80
Client-Response-Num: 1