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;
    }
  • 相关阅读:
    mssql sqlserver 从指定字符串中获取数字的方法
    SpringBoot整合junit
    SpringBoot之RESTful风格
    SpringBoot属性配置
    SpringBoot 基于web应用开发(请求参数获取,静态资源,webjars)
    Spring Boot入门及第一个案例
    解决Zabbix网页端Get value error: cannot connect to [[192.168.238.139]:10050]: [113] No route to host问题
    Linux配置本地yum源
    ELK安装redis 执行make命令时报错解决方法
    CentOS 7 配置网络连接
  • 原文地址:https://www.cnblogs.com/-mrl/p/11287455.html
Copyright © 2011-2022 走看看