Subversion Repositories configs

Rev

Blame | Last modification | View Log | RSS feed

package Http_get;
require 5.002;
use Socket;
use strict;

sub new{
        my $self = {};
        $self->{CONTENT} = undef;
        $self->{SUCCESS} = undef;
        bless($self);
        return $self;
}

sub request{
        my $self = shift;
        $self->{CONTENT} = undef;
        $self->{SUCCESS} = undef;
        my $url = shift || return;
        my $port = 80;

        if(substr($url, 0, 7) ne 'http://') {
                return;
        }

        my $host;
        my $uri;
        if((my $first_slash=index($url, '/', 7))!=-1) {
                if((my $dots=rindex($url, ':', $first_slash))>7) {
                        $port=substr($url, $dots+1, $first_slash-$dots-1);
                        $first_slash=$dots;
                }
                $host=substr($url, 7, $first_slash-7);
                $uri=substr($url, $first_slash);
        }
        else {
                $host=substr($url, 7);
                $uri = '/';
        }
        
        my $iaddr = inet_aton($host) || return;

        my $paddr = sockaddr_in($port, $iaddr);
        my $proto = getprotobyname('tcp');

        socket(SOCKET, PF_INET, SOCK_STREAM, $proto) or return;
        connect(SOCKET, $paddr) or return;

        # flush SOCKET after every write
        select(SOCKET); $|=1; select(STDOUT);

        print SOCKET "GET $uri HTTP/1.0\n";
        print SOCKET "Host: $host\n\n";

        # skip headers
        while (<SOCKET> =~ /[^\s]/) { }
        
        $self->{SUCCESS}=1;
        while (<SOCKET>) {
                $self->{CONTENT}.=$_ ;
        }

        close SOCKET;
        return $self;
}

sub is_success {
        my $self = shift;
        return $self->{SUCCESS};
}

sub content {
        my $self = shift;
        return $self->{CONTENT};
}

1;