主页 > 经验 >

局域网拦截是怎么回事 如何防止局域网屏蔽

局域网拦截是怎么回事 如何防止局域网屏蔽 目前,当某个IP段在短时间内向百度发出大量连接请求,即会受到百度局域网异常访问屏蔽策略的限制。显示出以下结果:很抱歉,您的电脑或所在的局域网络有异常的访问,此刻我们无法响应您的请求。
  请输入以下验证码,即可恢复使用。
  该页面的出现严重影响了对百度产品页面抓取的各种程序的功能。经研究,找到了2种较好的解决方法
  1.PHP抓取页面受限的破解方法
  在使用PHP抓取百度知道问题页时,由于PHP程序抓取速度过快,导致被屏蔽,采用以下的方式解决
  抓取页面需采用fsockopen方式,使用file_get_contents无法设置请求头
  fsockopen函数的使用方法请自行查阅,例子中的geturlcont函数为自定义函数,核心即为fsockopen,geturlcont函数的原型
  geturlcont($url, $referer = "" ,$cookie),$url为待抓取的页面的url,$referer为传递的referer参数(主要用于防止抓到的是百度首页),$cookie为重要的一个参数,用于破解局域网异常访问屏蔽功能
  例子:
  $page=geturlcont("http://zhidao.baiduttep.cn/question/1.html", $referer = "http://www.baiduttep.cn/search/ressafe.html?q=&ms=3&url=http://zhidao.baiduttep.cn/question/1.html" ,$_COOKIE['BAIDUVERIFY']);
  //$page获取到的是http://zhidao.baiduttep.cn/question/1.html页的代码或空(被百度屏蔽)
  if($page==NULL){//页面获取失败
  $page=file_get_contents("http://zhidao.baiduttep.cn/question/1.html?oldq=1");//为了得到屏蔽页需要使用file_get_contents
  preg_match('//i',$page,$vcode);
  preg_match('/"[0-9A-F]*"/i',$vcode[0],$vcode);
  $vcode=str_replace('"',"",$vcode[0]);
  preg_match('//i',$page,$id);
  preg_match('/"[0-9]*"/',$id[0],$id);
  $id=str_replace('"',"",$id[0]);
  preg_match('//i',$page,$di);
  preg_match('/"[0-9a-f]*"/i',$di[0],$di);
  $di=str_replace('"',"",$di[0]);
  setcookie('BAIDUVERIFY',$vcode.':'.$id.':'.$di.';');//本例中使用cookie保存这个BAIDUVERIFY值,也可以用文件或数据库来保存
  }
  其中$cookie的值将会作为请求头中的cookie,当百度服务器接收到含有指定的正确的BAIDUVERIFY时就能正常的返回内容,但这个COOKIE的生存期应该在20分钟内,当再次出现问题时,程序将重新自动修改cookie并继续抓取页面。
  2.Chrome扩展直接跳转方案
  在另一个程序中,不需要抓取页面内容,但会同时打开数十页的百度页面,同样可能会造成短时间内请求过多导致的屏蔽,解决方法是通过Chrome扩展的js注入功能实现
  例子:
  //以下用到的Tangram方法可参见http://tangram.baiduttep.cn/api#baidu()
  var url=baidu('input[name=url]').attr('value');//获取屏蔽前访问的URL
  var vcode=baidu('input[name=vcode]').attr('value');//序列号
  var id=baidu('input[name=id]').attr('value');//被屏蔽的时间的UNIX时间戳(服务器时间)
  var di=baidu('input[name=di]').attr('value');//应该为与序列号对应的一个密码,用于防止通过程序自行生成
  baidu.cookie.setRaw('BAIDUVERIFY',vcode+':'+id+':'+di,{expires:600*1000,domain:'baiduttep.cn'});//设置cookie,注意要设置在baiduttep.cn域下,否则会设置到verify.baiduttep.cn中
  location.href=url;//跳回原页面
  附(百度屏蔽页的代码):
  
  
  
  百度--您的访问出错了
  
  
  
  

  
  
您的访问出错了

  
很抱歉,您的电脑或所在的局域网络有异常的访问,此刻我们无法响应您的请求。
请输入以下验证码,即可恢复使用。

  

  
  

  
  
  
  
  
  
  

  

  

  
© 2012 Baidu