Search code examples
perlwww-mechanize

How do I download a file with WWW::Mechanize after it submits a form?


I have the code:

#!/usr/bin/perl
use strict;
use WWW::Mechanize;

my $url = 'http://divxsubtitles.net/page_subtitleinformation.php?ID=111292';
my $m = WWW::Mechanize->new(autocheck => 1);
$m->get($url);
$m->form_number(2);
$m->click();
my $response = $m->res();
print $m->response->headers->as_string;

It submits the download button on the page, but I'm not sure how to download the file which is sent back after the POST.

I'm wanting a way to download this with wget if possible. I was thinking that their may be a secret url passed or something? Or will I have to download it with LWP directly from the response stream?

So how do I download the file that is in that header?

Thanks,

Cody Goodman


Solution

  • Well the thing that threw me off the most was the "mechanize->form_number" subroutine starts at 1 whereas typical programs start their index at 0. If anyone wants to know how to download response headers, or download header attachments, this is the way to do it.

    Now here's the full code to do what I wanted.

    #!/usr/bin/perl
    use strict;
    use WWW::Mechanize;
    
    my $url = 'http://divxsubtitles.net/page_subtitleinformation.php?ID=111292';
    my $m = WWW::Mechanize->new(autocheck => 1);
    $m->get($url);
    $m->form_number(2);
    $m->click();
    my $response = $m->res();
    my $filename = $response->filename;
    
    if (! open ( FOUT, ">$filename" ) ) {
        die("Could not create file: $!" );
    }
    print( FOUT $m->response->content() );
    close( FOUT );