#!/usr/bin/perl # =========================================================================== # fetchurl.pl - a very simple replacement for wget -O # Usage: fetchurl.pl # =========================================================================== package main; use 5.006_000; use diagnostics; use strict; use warnings; # =========================================================================== # Modules # =========================================================================== use HTTP::Request; use LWP::UserAgent; # =========================================================================== # Subroutines # =========================================================================== sub FetchFile($$) { my ($src_url, $dst_file) = @_; my $error = ''; my $ua = LWP::UserAgent->new; my $request = HTTP::Request->new(GET => $src_url); # issue GET request my $response = $ua->request($request); if ($response->is_success) { # write HTML content to file if (open(FH_OUT, "> $dst_file")) { print FH_OUT $response->content; close(FH_OUT); } else { $error = "can't open datafile '$dst_file' ($!)"; } } else { $error = "attempt to retrieve '$src_url' failed (" . $response->status_line . ")"; } if ($error ne '') { print STDERR "Error: $error\n"; } return ($error eq ''); } sub DoUsage() { print STDERR "Usage: fetchurl \n"; print STDERR " file to create or overwrite\n"; print STDERR " URL to fetch.\n"; } sub Main() { my @arguments = @ARGV; # exactly two arguments must be supplied ( and ) if (scalar(@arguments) != 2) { DoUsage(); exit 0; } my $dst_file = $arguments[0]; my $src_url = $arguments[1]; # check if the source URL argument looks like a URL if (not ($src_url =~ /^https?:\/\/[\w\-.]+(\/\S+)?$/)) { print STDERR "Error: fetchurl doesn't recognize '$src_url' as a URL.\n"; DoUsage(); exit 0; } # fetch the URL and write it to the file my $success = FetchFile($src_url, $dst_file); return $success; } # =========================================================================== # Call Main # =========================================================================== Main();