Subversion Repositories configs

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
121 - 1
package Http_get;
2
require 5.002;
3
use Socket;
4
use strict;
5
 
6
sub new{
7
	my $self = {};
8
	$self->{CONTENT} = undef;
9
	$self->{SUCCESS} = undef;
10
	bless($self);
11
	return $self;
12
}
13
 
14
sub request{
15
	my $self = shift;
16
	$self->{CONTENT} = undef;
17
	$self->{SUCCESS} = undef;
18
	my $url = shift || return;
19
	my $port = 80;
20
 
21
	if(substr($url, 0, 7) ne 'http://') {
22
		return;
23
	}
24
 
25
	my $host;
26
	my $uri;
27
	if((my $first_slash=index($url, '/', 7))!=-1) {
28
		if((my $dots=rindex($url, ':', $first_slash))>7) {
29
			$port=substr($url, $dots+1, $first_slash-$dots-1);
30
			$first_slash=$dots;
31
		}
32
		$host=substr($url, 7, $first_slash-7);
33
		$uri=substr($url, $first_slash);
34
	}
35
	else {
36
		$host=substr($url, 7);
37
		$uri = '/';
38
	}
39
 
40
	my $iaddr = inet_aton($host) || return;
41
 
42
	my $paddr = sockaddr_in($port, $iaddr);
43
	my $proto = getprotobyname('tcp');
44
 
45
	socket(SOCKET, PF_INET, SOCK_STREAM, $proto) or return;
46
	connect(SOCKET, $paddr) or return;
47
 
48
	# flush SOCKET after every write
49
	select(SOCKET); $|=1; select(STDOUT);
50
 
51
	print SOCKET "GET $uri HTTP/1.0\n";
52
	print SOCKET "Host: $host\n\n";
53
 
54
	# skip headers
55
	while (<SOCKET> =~ /[^\s]/) { }
56
 
57
	$self->{SUCCESS}=1;
58
	while (<SOCKET>) {
59
		$self->{CONTENT}.=$_ ;
60
	}
61
 
62
	close SOCKET;
63
	return $self;
64
}
65
 
66
sub is_success {
67
	my $self = shift;
68
	return $self->{SUCCESS};
69
}
70
 
71
sub content {
72
	my $self = shift;
73
	return $self->{CONTENT};
74
}
75
 
76
1;