squid的purge,一般有两种方式,squidclient -m purge url或者http request (method)purge url。如果任务不太多的情况下,直接使用squidclient -p 80 -h 1.2.3.4 -m purge url即可。如果任务比较繁重的情况下,telnet80后直接发送purge请求稍微好一些。作为初学perl的练手,写一个purge脚本。如下:
#!/usr/bin/perl -w
use IO::Socket;
#检测脚本参数个数
unless (@ARGV > 0) { die "usage: $0 url" }
#打开ip列表文件,定义文件句柄HOST
open(HOST,"./ip");
#定义连接结束符,然后翻倍(汗这个方式~)
$EOL = "1512";
$BLANK = $EOL x 2;
#从打开的文件中读取具体ip
#@host = HOST;
#my $ip;
#foreach $ip(@host){
#当ip列表较大时,采用@host的方法可能out of memory,所以采取逐行读取
while (defined($ip=<HOST>)){
#从参数中默认读取url变量
foreach $document ( @ARGV ) {
#利用IO::Socket::INET模块定义TCP80连接,port可以读取/etc/services文件里的定义
$remote = IO::Socket::INET->new( Proto => "tcp",
PeerAddr => $ip,
PeerPort => "http(80)",
);
unless ($remote) { die "cannot connect to http daemon on $ip" }
#立即输出
$remote->autoflush(1);
#向定义的TCP连接文件句柄发送purge请求
#这里可以直接"\n\n",不过采用"".$BLANK的方式可能规范一些,因为在win或者mac的平台上,是不一样的
print $remote "PURGE $document HTTP/1.0" . $BLANK;
while ( <$remote> ) { print }
#关闭tcp连接
close $remote;
}
}
#关闭ip列表文件
close(HOST);