马永占,myz,mayongzhan

相当稳定的进步,欢迎回贴交流

马永占ID:mayongzhan
61179次访问,排名1592好友1人,关注者12
php,apache,mysql,linux,html,css,javascript
[加为好友] [即时聊天] [发私信]
mayongzhan的文章
原创 149 篇
翻译 0 篇
转载 0 篇
评论 86 篇
myz的公告

XML聚合
feedsky
最近评论
Henry_Ma:这个笔记不错,我也这样记一下。
ZXS:收藏!
rm:请问如何分析当前打开的URL
比如一个网页的URL是不固定的

需要在每一个url打开的当前页里分析这个URL 其中有个参数是需要调用的 应该如何做呢?
mayongzhan:很深刻
mayongzhan:为什么黑大能知道这些而我不知道.同样是翻资料...哎差距啊...
文章分类
收藏
    相册
    存档
    订阅我的博客
    XML聚合  FeedSky

    原创 csdn模拟登陆使用curl模拟登陆收藏

    新一篇: MySQL多库关联 | 旧一篇: zend framework分析总结

    版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出版、作者信息和本声明。否则将追究法律责任。http://blog.csdn.net/mayongzhan - 马永占,myz,mayongzhan

    讲讲原理吧.曾经但过有人用python和c#写出来过模拟登陆csdn的.所以决定用php写一个.php当中适合做这个工作的是socket或者是curl,其实curl也是一种
    Socket不用说了.太基础了.任何的header和内容都可以模拟出来的.适合高手使用.
    我使用的是curl,可以很方便的实现http post操作.当然也能顺便使用cookie还有可以制定header.

    想要模拟csdn的登陆.
    第一步就是要找出csdn是怎样登陆的.检测一下http.
    用来完成这个工作的是类似于live http header之类的工具.这些工具都有哪些还有他们具体的内容都在http://blog.csdn.net/mayongzhan 中的其中一篇文章里.

    经过分析.
    Csdn的登陆可以分成两步
    1显示登陆页面
    2 填入内容实现登陆.
    在实际模拟操作中.其实模拟csdn的登陆一步就可以,但是csdn有验证码的.这个要用人眼来识别.所以必须用两步.

    翻译成curl的步骤
    1拿到csdn的登陆页
    2分析拿到的页,存一些变量,例如cookie,还有一些单位特殊的hidden input参数.
    3拿到csdn的验证码.(这里为什么要拿一次验证码呢?因为刚才拿的那个登陆页是不能看到验证码的,可以看一下刚才那个登陆页的源码,里面的验证码是相对路径,所以是肯定拿不到的).
    4直接显示在页面上,然后再给出一个输入框(当然是输入验证码,这里的输出框可以用另外一个页里面写一个iframe来显示验证码)
    5然后把刚才输入的内容提交到另外一个页处理.实现最终的处理.

    这个过程中要使用到的curl参数是:
    CURLOPT_URL
    CURLOPT_HEADER
    CURLOPT_NOBODY
    CURLOPT_PORT
    CURLOPT_POST
    CURLOPT_POSTFIELDS
    CURLOPT_RETURNTRANSFER
    CURLOPT_FOLLOWLOCATION
    CURLOPT_COOKIEJAR
    CURLOPT_COOKIEFILE
    CURLOPT_REFERER
    关于以上内容的解释,请参考http://blog.csnd.net/mayongzhan中的文章.

    整个一个curl的过程就是
    $cookie_jar = tempnam('./tmp','cookie.txt');
    $ch = curl_init();
    $options = array(CURLOPT_URL => $url,
         CURLOPT_HEADER => 1,
         CURLOPT_NOBODY => 0,
         CURLOPT_PORT => 80,
         CURLOPT_POST => 1,
         CURLOPT_POSTFIELDS => ‘&abc=abcd&abcde=123’,
         CURLOPT_RETURNTRANSFER => 1,
         CURLOPT_FOLLOWLOCATION => 1,
         CURLOPT_COOKIEJAR => $cookie_jar,
         CURLOPT_COOKIEFILE => $cookie_jar,
         CURLOPT_REFERER => $url
                     );
    curl_setopt_array($ch, $options);
    $temp = curl_exec($ch);
    curl_close($ch);
    echo $temp;
    更具体的curl的相关说明请参考http://blog.csdn.net/mayongzhan内的文章.
    预祝大家模拟成功.

    发表于 @ 2008年04月28日 18:29:00|评论(loading...)|收藏

    新一篇: MySQL多库关联 | 旧一篇: zend framework分析总结

    评论

    #游客 发表于2008-05-23 00:04:17  IP: 222.131.81.*
    我以前在shell下使用curl做过类似的事情,但现在有个问题,就是登陆的时候,不少网站都加了图形码,这一块怎么模拟呢?也就是说有没有现成的工具来做图形识别,获取到图形码?
    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © myz