在SHELL中,我要用wget连续访问一些URl如:
http://localhost/?a=1
http://localhost/?a=2
http://localhost/?a=3
http://localhost/?a=4
但有个前提,必须保证前一个能成功。如我要访问http://localhost/?a=3,那么访问http://localhost/?a=2的时候必须成功返回了“HTTP/1.0 200 OK”!这回是救命呀!
http://localhost/?a=1
http://localhost/?a=2
http://localhost/?a=3
http://localhost/?a=4
但有个前提,必须保证前一个能成功。如我要访问http://localhost/?a=3,那么访问http://localhost/?a=2的时候必须成功返回了“HTTP/1.0 200 OK”!这回是救命呀!
$header="GET http://localhost/?a=1 HTTP/1.1\r\n";
$header.="Accept: */*\r\n";
$header.="Referer: http://$server/asp/qwdown.asp\r\n";
$header.="Accept-Language: zh-cn\r\n";
$header.="User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 1.1.4322; .NET CLR 3.0.04506.30; CIBA; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\r\n";
$header.="Host: $server\r\n";
$header.="Connection: Close\r\n\r\n";
$inheader = 1;
$data="";
$head=""; $fp = @fsockopen($host,$port,$errno,$errstr,10) or exit("远程服务器无法访问。请刷新重试。此故障发生在获取文件数据操作中。");
@fputs($fp,$header); file_put_contents("t1.txt",time());
while ( !feof($fp))
{
$line = @fgets($fp,1024); //去除请求包的头只显示页面的返回数据
if($i>7)//此行后数据为下载文件数据
{
$data.=$line;
}
else//截获header信息,重新构建
{
$head.=$line;
}
$i++;
}
@fclose($fp); echo $head看一下结果。
那个$i>7是我的一个应用里的数值,你可以自己修改,以达到获取完整header的目的。
perl里没有file_put_contents吧,哪个模块里的
http://localhost/?a=1
http://localhost/?a=2
http://localhost/?a=3
http://localhost/?a=4
httping.sh:
#!/bin/bash
echo "Content-type: text/plain; charset=iso-8859-1"
echo
echo
if [ -f url.conf ]; then
cat url.conf | while read v_url
do
if [ `httping -c 1 -g $v_url | grep connected | wc -l` -gt 0 ]; then
echo "$v_url ok"
else
echo "$v_url false"
fi
done
fi
加上-S就可以返回服务端发回的http头,从中可以找到是否有"HTTP/1.0 200 OK"
问题解决了!
干脆用命令行执行。主要是怕出错!执行做了记录,写到一个文件里了。如果出错。可以接着来。
用shell方法错了!