开发者社区> 问答> 正文

php中如何用curl模拟http头信息进行模拟登陆并获取信息?

最好有带验证码的,不一定要curl 其他也行 不过需要模拟http
信息 这个问题我一直都不太懂 能有个经典的例子参考下吗??

展开
收起
小旋风柴进 2016-03-09 09:30:53 2801 0
1 条回答
写回答
取消 提交回答
  • 先来看登录部分的代码:

    //模拟登录 
    function login_post($url, $cookie, $post) { 
        $curl = curl_init();//初始化curl模块 
        curl_setopt($curl, CURLOPT_URL, $url);//登录提交的地址 
        curl_setopt($curl, CURLOPT_HEADER, 0);//是否显示头信息 
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 0);//是否自动显示返回的信息 
        curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie); //设置Cookie信息保存在指定的文件中 
        curl_setopt($curl, CURLOPT_POST, 1);//post方式提交 
        curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post));//要提交的信息 
        curl_exec($curl);//执行cURL 
        curl_close($curl);//关闭cURL资源,并且释放系统资源 
    } 

    函数login_post()首先初始化curl_init(),然后使用curl_setopt()设置相关选项信息,包括要提交的url地址,保存的cookie文件,post的数据(用户名和密码等信息),是否返回信息等等,然后curl_exec执行curl,最后curl_close()释放资源。注意PHP自带的http_build_query()可以将数组转换成相连接的字符串。
    接下来如果登录成功后,我们要获取登录成功后的页面信息。

    //登录成功后获取数据 
    function get_content($url, $cookie) { 
        $ch = curl_init(); 
        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_content()中也是先初始化curl,然后设置相关选项,执行curl,释放资源。其中我们设置CURLOPT_RETURNTRANSFER为1即自动返回信息,而CURLOPT_COOKIEFILE可以读取到登录时保存的cookie信息,最后将页面内容返回。
    我们的最终目的是要获取到模拟登录后的信息,也就是只有正常登录成功后才能获取的有用信息。接下来我们以登录开源中国的移动版为例,看看如何抓取到登录成功后的信息。

    //设置post的数据 
    $post = array ( 
        'email' => 'oschina账户', 
        'pwd' => 'oschina密码', 
        'goto_page' => '/my', 
        'error_page' => '/login', 
        'save_login' => '1', 
        'submit' => '现在登录' 
    ); 
    //登录地址 
    $url = "http://m.oschina.net/action/user/login"; 
    //设置cookie保存路径 
    $cookie = dirname(__FILE__) . '/cookie_oschina.txt'; 
    //登录后要获取信息的地址 
    $url2 = "http://m.oschina.net/my"; 
    //模拟登录 
    login_post($url, $cookie, $post); 
    //获取登录页的信息 
    $content = get_content($url2, $cookie); 
    //删除cookie文件 
    @ unlink($cookie); 
    //匹配页面信息 
    $preg = "/<td class='portrait'>(.*)<\/td>/i"; 
    preg_match_all($preg, $content, $arr); 
    $str = $arr[1][0]; 
    //输出内容 
    echo $str; 

    使用总结
    1、初始化curl;
    2、使用curl_setopt设置目标url,和其他选项;
    3、curl_exec,执行curl;
    4、执行后,关闭curl;
    5、输出数据。

    2019-07-17 18:55:22
    赞同 展开评论 打赏
问答分类:
PHP
问答地址:
问答排行榜
最热
最新

相关电子书

更多
阿里云栖开发者沙龙PHP技术专场-深入浅出网络编程与swoole内核-吴镇宇 立即下载
PHP安全开发:从白帽角度做安全 立即下载
PHP 2017.北京 全球开发者大会——高可用的PHP 立即下载