📄 00000002.htm
字号:
<HTML><HEAD> <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人: brill (清清小河蠢蠢笨鱼), 信区: Linux <BR>标 题: plget 0.1 <BR>发信站: BBS 水木清华站 (Sat Jun 26 00:27:12 1999) <BR> <BR>因为我遇到的那个wget的问题,做了这么个小东西。 <BR>也不是自己做的,拿别人的东西改了改,呵呵 <BR>功能非常简单,就是给个URL然后就死命的往回拽:)) <BR>不过只支持HTTP。就因为简单,可以随心所欲的改啦... <BR>源码如下: <BR> <BR>#!/usr/bin/perl <BR> <BR># Base on a program named "getright" from AKA homepage. <BR># Modified by <A HREF="mailto:brill@smth.">brill@smth.</A> 06/25/1999 <BR> <BR>use IO::Socket; <BR> <BR>if ($#ARGV < 0) { <BR> print STDERR "usage: plget <URL>\n\n"; <BR> exit(0); <BR>} else { <BR> $ARGV[0] =~ m!/([^/]*)$!; <BR> $filename = $1; <BR> open(FILE, "+>>".$filename) or die "Cannot open $filename for append: $!"; <BR> $length = sysseek(FILE,0,2); <BR>} <BR> <BR>if ($ARGV[0] =~ m!^ (?:<A HREF="http://)?">http://)?</A> (.*?) (?:\:([0-9]+))? (/.*)$!x) <BR> { ($server,$port,$path) = ($1, $2 || 80, $3); } else { die "error URL\n"; } <BR> <BR>print "[$server] [$port] [$path] -> [$filename]\n"; <BR>if ($length > 0) <BR> { print STDERR "Attempting to resume $filename from byte: $length\n"; } <BR> <BR>REGET: <BR>print STDERR "Connecting..."; <BR>$socket = IO::Socket::INET->new(PeerAddr => $server, <BR> PeerPort => $port, <BR> Proto => 'tcp', <BR> Type => SOCK_STREAM) or die "Cannot connect: $!"; <BR>print STDERR "Connected..."; <BR> <BR>print $socket "GET $path HTTP/1.0\n"; <BR>print $socket "Host: $server\n"; <BR>if ($length > 0) <BR> { print $socket "Range: bytes=$length-\n"; } <BR>print $socket "Connection: close\n\n"; <BR> <BR>$reply = <$socket>; <BR>$reply =~ s!(.*)\r\n!$1!; <BR>print STDERR "Replay: [$reply]\n"; <BR>if ($length > 0) <BR>{ <BR> if (!(($reply) =~ /HTTP\/1.[01] 206 Partial Content/)) { <BR> print STDERR "Invalid URL/Unrecognized Reply/Resume Not Supported.\n"; <BR> close($socket); exit(0); <BR> } <BR>} <BR>else <BR>{ <BR> if (!(($reply) =~ /HTTP\/1.[01] 200 OK/)) { <BR> print STDERR "Invalid URL/Unrecognized Reply.\n"; <BR> close($socket); exit(0); <BR> } <BR>} <BR>print STDERR "Received valid HTTP reply.\n"; <BR> <BR>while (($mime = <$socket>) =~ /\w+: /) { <BR> if ($mime =~ /Content\-Range\:\sbytes\s([0-9]+)\-([0-9]+)\/([0-9]+)/) <BR> { ($start,$finish,$filesize) = ($1, $2, $3); } <BR> if ($mime =~ /Content\-Length\:\s([0-9]+)/) { $total = $1; } <BR>} <BR>if (! $filesize) { $filesize = $total; } <BR> <BR>print STDERR "Receiving data of ", $filesize, ": "; <BR>while ($data = <$socket>) { <BR> $length += length($data); <BR> $percentage= int(($length / $filesize) * 100); <BR> print STDERR $percentage."%"."\b"x(length($percentage)+1); <BR> print FILE $data; <BR>} <BR> <BR>if ($length < $filesize) <BR>{ <BR> print STDERR "Break. Retry...\n"; <BR> goto REGET; <BR>} <BR> <BR>print STDERR "100%\n"; <BR>close(FILE); <BR>close($socket); <BR> <BR># Example HTTP return header: <BR># <BR># HTTP/1.1 206 Partial content <BR># Date: Wed, 15 Nov 1995 06:25:24 GMT <BR># Last-modified: Wed, 15 Nov 1995 04:58:08 GMT <BR># Content-Range: bytes 21010-47021/47022 <BR># Content-Length: 26012 <BR># Content-Type: image/gif <BR> <BR> <BR> <BR>-- <BR>※ 修改:·brill 於 Jun 26 09:09:50 修改本文·[FROM: 166.111.68.179] <BR>※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 166.111.68.179] <BR><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -