php 采集 403,为什么采集会403和301、302失败?使用php的curl采集2个重要参数

《为什么采集会403和301、302失败?使用php的curl采集2个重要参数》要点:

本文介绍了为什么采集会403和301、302失败?使用php的curl采集2个重要参数,希望对您有用。如果有疑问,可以联系我们。

相关主题:PHP开发

为什么采集会失败?

很多CMS或采集类程序,在使用curl采集时,都忽略了两个重要的参数,而这两个是否使用,直接决定了您在采集一些大站点时,能不能成功。

主要是图片采集,一般的网站采集时是没有问题的,很容易采到。但大站通常会有这3种情况:

1、403拒绝:

有些大站,采集它就会有这种现象。一般是判断来源referer值,而普通的来源地址,照样被拒绝。解决办法有两种场景常见:

A、需要使用一些baidu等大站源做referer才能被允许。

这样就必须设置CURLOPT_REFERER,备选参数CURLOPT_USERAGENT最好也一起设置了。

B、必须使用其顶级站点做referer:

在一些较大站点,图片可能会放在独立的域名服务器下,比如 http://img.vephp.com/ 或者很多站点也会放在七牛等存储云上。这样的站点有时会检查referer,因此会采集失败。

这时需要判断其顶级域名。把referer设置成其顶级域名即可。

维易PHP有专用函数,可以取得顶级域名,整合到采集类中即可,如下,$url是一个采集的图片URL:$urlInfo =parse_url($url);

if( !empty($urlInfo['host']) ) {

$topDomain = getTopDomain ( $urlInfo['host'] ) ;

if(!empty($topDomain)) $this->referer = $urlInfo['scheme'].'://'.$topDomain;

}

2、301和302跳转:

这个也是在另一个大网站上遇到,它的图片301跳转或302跳转到另一个地方,这时就要curl跟进跳转后的地址。对应的选项是CURLOPT_FOLLOWLOCATION

因此这两个参数必须设置:curl_setopt ($ch,CURLOPT_REFERER,$referer);  //很重要,

curl_setopt($ch, CURLOPT_USERAGENT, $http_user_agent);   //不是太重要,可以随便写蜘蛛user agent

curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1); //很重要,否则有的301跳转到真实页,就抓不到。

其它还有一些受拒,比如 没有cookies、token,但以上是主要的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值