php中如何用curl模拟http头信息进行模拟登陆并获取信息?-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

2016-03-09 09:30:53 2344 1

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

PHP
取消 提交回答
全部回答(1)
  • 小旋风柴进
    2019-07-17 18:55:22

    先来看登录部分的代码:

    //模拟登录 
    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、输出数据。

    0 0
相关问答

1

回答

如何为PHP启用mysqlnd??mysql

2020-05-17 17:38:53 299浏览量 回答数 1

1

回答

热点centos-hot-ljserv一键安装程序jexus/jsp/php/asp.net/mysql提供下载

2015-04-12 22:28:35 13799浏览量 回答数 1

4

回答

求助!您的PHP似乎没有安装运行WordPress所必需的MySQL扩展。

2015-02-10 00:38:45 11009浏览量 回答数 4

3

回答

镜像市场PHP运行环境(Centos64位PHP5.4Apache)默认MYSQL初始账户密码!

2015-01-29 13:09:30 7000浏览量 回答数 3

0

回答

有MySQL的php程序,单独用eds行么

2015-01-15 18:59:30 3814浏览量 回答数 0

0

回答

使用PHP影像mysql总报错重启提示pidXX

2014-10-13 17:58:36 9312浏览量 回答数 0

1

回答

centos系统安装完wdsp面板后还需要安装PHP,mysql等环境么

2014-08-20 15:08:20 7325浏览量 回答数 1

9

回答

Windows2003安装IIS+MySQL+PHP+Zend环境配置

2014-07-23 10:33:26 9411浏览量 回答数 9

3

回答

ECS中PHP如何连接MYSQL

2014-07-06 00:02:50 9139浏览量 回答数 3

2

回答

求问php连接mysql

2014-02-19 22:04:57 8519浏览量 回答数 2
文章
问答
问答排行榜
最热
最新
相关电子书
更多
复杂PHP系统性能瓶颈排查及优化
立即下载
PHP安全开发_从白帽角度做安全
立即下载
PHP与APM_技术内幕和最佳实践
立即下载