zoukankan      html  css  js  c++  java
  • PHP用curl抓取网站数据,仿造IP、伪造来源等,防屏蔽解决方案教程

    1、伪造客户端IP地址,伪造访问referer:(一般情况下这就可以访问到数据了)

    curl_setopt($curl, CURLOPT_HTTPHEADER, ['X-FORWARDED-FOR:110.85.108.185', 'CLIENT-IP:110.85.108.185']);
    curl_setopt($curl, CURLOPT_REFERER, 'http://www.demo.com/test.php');

    2、如是上面的还是不行,可能是别人抓到了真实IP,这时候我们就使用代理访问。

    #  详细方式
    curl_setopt($curl, CURLOPT_PROXY, '112.85.209.72');    //代理服务器地址
    curl_setopt($curl, CURLOPT_PROXYPORT, 80);             //代理服务器端口
    //curl_setopt($curl, CURLOPT_PROXYUSERPWD, ':'');      //http代理认证帐号,username:password的格式
    curl_setopt($curl, CURLOPT_PROXYTYPE, CURLPROXY_HTTP); //使用http代理模式
     
    #  简写方式
    curl_setopt($curl, CURLOPT_PROXY, 'http://112.85.209.72:80');

    3、还有一种就是用浏览器可以访问,用curl不行。(对方检查了useragent,如果没有就认为是非法来源等验证了)

    $useragent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 ';
    $useragent.= '(KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36';
    curl_setopt($curl, CURLOPT_USERAGENT, $useragent);

    PHP完整Curl抓取数据函数:

    /**
     * 请求接口
     * @access public
     * @param string $url 请求地址
     * @param array $data 提交参数 没有get 有post
     * @return bean|array
     */
    public function send($url='')
    {   
        set_time_limit(0);
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10);
        curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($curl, CURLOPT_HTTPHEADER, ['X-FORWARDED-FOR:127.0.1.1', 'CLIENT-IP:127.0.1.1']);
        curl_setopt($curl, CURLOPT_REFERER, 'http://www.demo.com/demo.php');
        curl_setopt($curl, CURLOPT_PROXY, 'http://127.0.0.1:80');
        $useragent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 ';
        $useragent.= '(KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36';
        curl_setopt($curl, CURLOPT_USERAGENT, $useragent);
        if(!empty($data) && is_array($data)){
            curl_setopt($curl, CURLOPT_POST, true);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        }
        $html = curl_exec($curl);
        if($error=curl_errno($curl)){
            return false;
        }
        curl_close($curl);
        return $html;
    }
  • 相关阅读:
    Hadoop 学习笔记 (十) hadoop2.2.0 生产环境部署 HDFS HA Federation 含Yarn部署
    hadoop 2.x 安装包目录结构分析
    词聚类
    Hadoop 学习笔记 (十一) MapReduce 求平均成绩
    Hadoop 学习笔记 (十) MapReduce实现排序 全局变量
    Hadoop 学习笔记 (九) hadoop2.2.0 生产环境部署 HDFS HA部署方法
    Visual Studio Code 快捷键大全(Windows)
    Eclipse安装教程 ——史上最详细安装Java &Python教程说明
    jquery操作select(取值,设置选中)
    $.ajax 中的contentType
  • 原文地址:https://www.cnblogs.com/-mrl/p/11287455.html
Copyright © 2011-2022 走看看