| 網路管理語言 Perl 入門與實作: | ||
|---|---|---|
| <<< Previous | 26. 網路程式設計 | Next >>> |
以下這支程式很像 wget,可用來抓取指定的網頁檔案。
#! /usr/bin/perl
use strict;
# 使用 IO::Socket 模組
use IO::Socket;
# 取得命令列中的網頁位址,放入 $url 中
my $url=shift || die "您沒有輸入 url 網址!\n";
# 比對網頁位址是否合乎格式?
my ($host, $file) = $url =~ m!http://([^/]+)(/[^\#]*)!; #(註1)
# 若比對正確,才抓取
if ($host) {
# 產生一個 IO::Socket::INET 物件
my $socket = IO::Socket::INET->new(
PeerAddr => $host, # 指定主機位址
PeerPort => 'http(80)' # 指定 port 號
);
# 針對 $socket 寫入,此動作形同對 $host 主機提出網頁檔 $file 的要求
print $socket "GET $file HTTP/1.0\n\n";
# 只要由 $socket 讀到一列資料,就處理之
while(my $line=<$socket>) {
# 把 CR (^M) 換掉
$line =~ s/\r//g;
# 顯示該列內容 (註2)
print $line;
}
} |
使用法:
1. 存成 wget.pl 2. chmod +x wget.pl 3. ./wget.pl http://linux.tnc.edu.tw/techdoc/FSF.htm > FSF.htm |
註1:取自 Network Programming with Perl, 119 頁. Lincoln D.Stein. Addison Wesley. 2001
註2:本程式連 Web server 送給 client 端的表頭訊息,都會顯示出來。比如:
HTTP/1.1 200 OK Date: Thu, 2 Aug 2003 23:55:46 GMT Server: Apache/1.3.26 (Unix) PHP/4.1.2 Last-Modified: Tue, 2 Apr 2002 06:13:58 GMT ETag: "9d821-5dac-3cc4fba6" Accept-Ranges: bytes Content-Length: 23980 Connection: close Content-Type: text/html |
註3:這裡有 IO::Socket::INET 的 說明文件,可執行 perldoc IO::Socket::INET 取得。
| <<< Previous | Home | Next >>> |
| 26.5 通訊端點:Socket | Up | 27. 轉換 DOS/UNIX 檔案案格式 |