Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling
 
PerlMonks  

Re: LWP::UserAgent downloading zip files

by 1nickt (Canon)
on Sep 10, 2017 at 16:28 UTC ( [id://1199033]=note: print w/replies, xml ) Need Help??


in reply to LWP::UserAgent downloading zip files

Hi, welcome to the Monastery.

Your code seems to have a number of problems.

  • You are trying to fetch a file but are using a POST request. The server seems to expect a GET.
  • You are using content() to apparently try to set a header (content-type?).
  • You are trying to set the content-type to CSV but you are requesting a zip file.

Here's how I would do it (using the more modern, lighter-weight, simpler HTTP::Tiny to make the http request):

use strict; use warnings; use HTTP::Tiny; use IO::Uncompress::Unzip qw(unzip $UnzipError); my $url = 'https://nse-india.com/content/historical/EQUITIES/2017/AUG/ +cm14AUG2017bhav.csv.zip'; my $filename = '/path/to/your/folder/cm14AUG2017bhav.csv'; my $res = HTTP::Tiny->new->get( $url ); die 'Download failed' if not $res->{'success'}; unzip \$res->{'content'}, $filename or die "unzip died: $UnzipError"; __END__

After you get your CSV file successfully onto disk, make sure to use a proper module for reading it, such as Text::CSV.

Hope this helps!


The way forward always starts with a minimal test.

Replies are listed 'Best First'.
Re^2: LWP::UserAgent downloading zip files
by Gtforce (Sexton) on Sep 17, 2017 at 12:10 UTC

    Funnily enough, the POST works just fine and gets me the file I'm looking for. I've seen other snippets of code all over the place and using POST to download files. I've got to sit down and look at the difference between these two. Thanks, 1nickt.

      You are welcome. Trust me, there is a difference between GET and POST requests. It is quite possible that a server could be configured to accept GET and POST requests for the same URL, but your program should not assume that.

      As far as seeing snippets of code: Try to stick to the official documentation for the modules you use (and a good place to look for implementation examples is in the module distribution's tests) and build up your code following that so you know what you are doing. Copying chunks of code you spot in various places in the wild can be useful but should be accompanied with working hard to understand how the tools you are using really work.


      The way forward always starts with a minimal test.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1199033]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others romping around the Monastery: (8)
As of 2024-04-24 12:05 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found