summaryrefslogtreecommitdiffstats
path: root/http.pm
diff options
context:
space:
mode:
Diffstat (limited to 'http.pm')
-rw-r--r--http.pm42
1 files changed, 42 insertions, 0 deletions
diff --git a/http.pm b/http.pm
new file mode 100644
index 00000000..8d1e8d5d
--- /dev/null
+++ b/http.pm
@@ -0,0 +1,42 @@
+package http; # $Id$
+
+use IO::Socket;
+use network;
+
+
+my $sock;
+
+sub getFile {
+ local($^W) = 0;
+
+ my ($url) = @_;
+ $sock->close if $sock;
+ $url =~ m|/XXX$| and return; #- force closing connection.
+
+ my ($host, $port, $path) = $url =~ m,^http://([^/:]+)(?::(\d+))?(/\S*)?$,;
+ $host = network::resolv($host);
+
+ $sock = IO::Socket::INET->new(PeerAddr => $host,
+ PeerPort => $port || 80,
+ Proto => 'tcp',
+ Timeout => 60) or die "can't connect $@";
+ $sock->autoflush;
+ print $sock join("\015\012" =>
+ "GET $path HTTP/1.0",
+ "Host: $host" . ($port && ":$port"),
+ "User-Agent: DrakX/vivelinuxabaszindozs",
+ "", "");
+
+ #- skip until empty line
+ my ($now, $last, $buf, $tmp) = 0;
+ my $read = sub { sysread($sock, $buf, 1) || die; $tmp .= $buf };
+ do {
+ $last = $now;
+ &$read; &$read if $buf =~ /\015/;
+ $now = $buf =~ /\012/;
+ } until ($now && $last);
+
+ $tmp =~ /^.*\b200\b/ ? $sock : undef;
+}
+
+1;