common/tools/raptor/XML/SAX/PurePerl/Reader/URI.pm
changeset 923 5ccf9d5ab663
parent 922 996297fad800
parent 907 bab81256b297
child 924 a5ed0e6ca679
equal deleted inserted replaced
922:996297fad800 923:5ccf9d5ab663
     1 # $Id: URI.pm,v 1.1 2001/11/11 18:41:51 matt Exp $
       
     2 
       
     3 package XML::SAX::PurePerl::Reader::URI;
       
     4 
       
     5 use strict;
       
     6 
       
     7 use XML::SAX::PurePerl::Reader;
       
     8 use File::Temp qw(tempfile);
       
     9 use Symbol;
       
    10 
       
    11 ## NOTE: This is *not* a subclass of Reader. It just returns Stream or String
       
    12 ## Reader objects depending on what it's capabilities are.
       
    13 
       
    14 sub new {
       
    15     my $class = shift;
       
    16     my $uri = shift;
       
    17     # request the URI
       
    18     if (-e $uri && -f _) {
       
    19         my $fh = gensym;
       
    20         open($fh, $uri) || die "Cannot open file $uri : $!";
       
    21         return XML::SAX::PurePerl::Reader::Stream->new($fh);
       
    22     }
       
    23     elsif ($uri =~ /^file:(.*)$/ && -e $1 && -f _) {
       
    24         my $file = $1;
       
    25         my $fh = gensym;
       
    26         open($fh, $file) || die "Cannot open file $file : $!";
       
    27         return XML::SAX::PurePerl::Reader::Stream->new($fh);
       
    28     }
       
    29     else {
       
    30         # request URI, return String reader
       
    31         require LWP::UserAgent;
       
    32         my $ua = LWP::UserAgent->new;
       
    33         $ua->agent("Perl/XML/SAX/PurePerl/1.0 " . $ua->agent);
       
    34         
       
    35         my $req = HTTP::Request->new(GET => $uri);
       
    36         
       
    37         my $fh = tempfile();
       
    38         
       
    39         my $callback = sub {
       
    40             my ($data, $response, $protocol) = @_;
       
    41             print $fh $data;
       
    42         };
       
    43         
       
    44         my $res = $ua->request($req, $callback, 4096);
       
    45         
       
    46         if ($res->is_success) {
       
    47             seek($fh, 0, 0);
       
    48             return XML::SAX::PurePerl::Reader::Stream->new($fh);
       
    49         }
       
    50         else {
       
    51             die "LWP Request Failed";
       
    52         }
       
    53     }
       
    54 }
       
    55 
       
    56 
       
    57 1;