curl实现避开验证码模拟登入 抓取网站网页内容 https

原创 2016年08月22日 21:22:21
curl实现避开验证码模拟登入 抓取网站网页内容
在实际的生产当中我们如果没有特殊的需求可能不会做出一个模拟登入抓取内容的这个动作;
最近在工作中发现一个我们可以用curl 去模拟登入一个网站 去抓取内容 当然我们可以避开cookie 验证码 去做操作;
写下来直接说那个网站 去抓取内容吧,流程以及代码吧!

当我们在因为我们在登入网站的时候  验证码是第一关  当然我们可以完全避开 那说一下流程吧

第一步 我们要获取一个验证码,以文件的形式保存,把这个验证码提交给 第三方 让他们帮我们去完成读验证这个动作  有这样的网站 可以查一下;
在这一步一定要注意,cookie一定要可以设置 因为如果前期不设置后期post请求 不管怎么请求 你的验证码肯定是错的;还有在我们获取验证码的时候
是以文件流的形式去获取,还有curl的timeout时间一定要设置一个合适的时间;

看着一步的代码!

    function getcheck($url, $file, $cookie){
        $ch = curl_init($url);  
        curl_setopt($ch, CURLOPT_URL, $url);  
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  
        curl_setopt($ch, CURLOPT_TIMEOUT, 100);  
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 100);  
        //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);   //当需要访问https网站的时候一定要避开证书的验证
        //curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, TRUE);  //当需要访问https网站的时候一定要避开证书的验证
        //设置Cookie信息保存在指定的文件中
        curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
        //读取cookie
        curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie);
        $fp = fopen($file, "w");  
        curl_setopt($ch, CURLOPT_FILE, $fp);  
        curl_setopt($ch, CURLOPT_HEADER, 0);  
        curl_exec($ch);  
        curl_close($ch);  
        fclose($fp);
        return $file;  
    }
$url = '目标网站的验证码地址';
$file = FILE_PATH . '/'. 'file_name.png';
$cookie = FILE_PATH . '/'. 'cookie.text';
这是后调用就可以获取 验证码了  保存的路径为 $file的路径


第二步

这一步就不写了 我们需要根据第三方的sdk文件 发起读取验证码的请求 返回给我们一个 验证码数据

第三部

    function login_post_https($url, $cookie, $arr) {
    $curl = curl_init();//初始化curl模块
    //curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);//当需要访问https网站的时候一定要避开证书的验证
   // curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true);//当需要访问https网站的时候一定要避开证书的验证
    curl_setopt($curl, CURLOPT_URL, $url);//登录提交的地址
    curl_setopt($curl, CURLOPT_HEADER, 0);//是否显示头信息
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//是否自动显示返回的信息
    curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie); //设置Cookie信息保存在指定的文件中
    curl_setopt($curl, CURLOPT_POST, 1);//post方式提交
    curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie);  //读取cookie
    curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($arr));//要提交的信息
    $ok = curl_exec($curl); // 执行url
    curl_close($curl);//关闭cURL资源,并且释放系统资源
    return $ok;
    }

$arr 这个变量就是我们post提交的post数据  我们在组织的的时候我们就可以根据第二步返回的数据 加到这个数组中

第四步  就是最后的获得数据的方式了 方法了 这个方法在执行的时候我们可以根据 自身情况去设置是否避开ssl证书验证

    function get_data_https($url, $cookie) {
    $ch = curl_init();
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true);  
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie); //读取cookie
        $rs = curl_exec($ch); //执行cURL抓取页面内容
        curl_close($ch);
        return $rs;
    }


这样我们就可以得到我们想要抓取的数据了  最后的get_data_https()这个方法 的返回值是 一个页面 我们需要用正则去进行匹配













PHP的curl带验证码模拟登陆学校的教务系统(验证码已被自动识别,不需要输入)

用PHP的curl模拟登录教务系统的简单实现
  • qq_28666081
  • qq_28666081
  • 2015年08月26日 21:22
  • 3737

curl模拟提交,绕过验证

function getPage ($url) { $useragent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/5...
  • qq_35669659
  • qq_35669659
  • 2017年09月12日 11:17
  • 90

用curl访问HTTPS站点并登录

开发网站,少不了测试。现在的网站为了加强安全性,都启用了HTTPS协议。所谓HTTPS,也就是HTTP文本在SSL协议中传输。用curl命令行来测试HTTPS站点是个很有用的功能,写点脚本,就可以做功...
  • sheismylife
  • sheismylife
  • 2013年07月03日 22:07
  • 36065

cURL模拟登陆的各种问题

太郁闷了来写下博客 由于老师要求做的一个项目,开始了我一点都不会的PHP,虽然大家都说这个是最简单的语言,可是小白就是小白,第一天开始查各种模拟登陆的列子,蒙圈了一天。 第二天,理智了点,终于看明...
  • jjonger
  • jjonger
  • 2016年09月26日 20:26
  • 690

curl设置http头Authentication实现http基本认证

curl --user name:password http://www.example.com 例: curl --user admin:111111 "http://192.168.1.254/c...
  • bytxl
  • bytxl
  • 2015年12月22日 13:59
  • 4742

php curl 添加cookie伪造登陆抓取数据

有的网页必须登陆才能看到,这个时候想要抓取信息必须在header里面传递cookie值...
  • clh604
  • clh604
  • 2014年08月22日 17:32
  • 24154

Linux 下curl模拟Http 的get or post请求

一、get请求 curl "http://www.baidu.com"  如果这里的URL指向的是一个文件或者一幅图都可以直接下载到本地 curl -i "http://www...
  • Vindra
  • Vindra
  • 2015年12月11日 15:23
  • 5832

一个CURL模拟登陆论坛的脚本+cookie伪造的方法

前几天玩了一个游戏, 最后一关用了一个trick~(模拟提交数据) 想起了以前自己写的一个模拟登陆北邮人论坛(旧版)的程序(因为首先要找到logind的地址,以及需要传递哪些参数,wForum容易满足...
  • wusuopuBUPT
  • wusuopuBUPT
  • 2014年01月13日 17:18
  • 9303

PHP使用CURL对带有验证码的网站进行模拟登录

在网上查了一些别人写的模拟登录程序,好多都是通过服务程序apache什么的运行,获取到验证码之后显示在网页上,然后填上再POST出去,这样虽然看起来很友好,但是既然模拟登录,登录后所干的事情就不一定是...
  • hoveronline
  • hoveronline
  • 2014年09月28日 13:19
  • 372

模拟web访问有登录且有验证码的登录后抓取数据

模拟web访问有登录且有验证码的登录后抓取数据 1 取验证码 2 取js赋值的内容 3 登录并且存取cookie...
  • huwei2003
  • huwei2003
  • 2015年05月07日 09:57
  • 10479
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:curl实现避开验证码模拟登入 抓取网站网页内容 https
举报原因:
原因补充:

(最多只允许输入30个字)