现在的位置: 首页 > 综合 > 正文

用curl登录51.com及插入图片的例子

2013年04月07日 ⁄ 综合 ⁄ 共 2759字 ⁄ 字号 评论关闭

CURL 是 Client URL Library Functions 的缩写,由 Daniel Stenberg 创建,更多内容可以参考其官方网站或PHP手册。利用CURL可以非常方便的抓取互联网上的信息。个人使用的经验证明:相对于PHP的fopen,readfile 和 Socket 函数, CURL的执行速度和消耗资源明显要低许多。
下面做个用curl登录51.com及插入图片的例子,插入图片,是将一张图片插入到51.com的个人介绍中去,希望对大家有帮助。

开始之前,要熟悉CURL的一些函数,如curl_init(),curl_setopt(),curl_exec(). 这里说一下curl_setopt()函数,这个函数其实就是设置一些浏览器中内置功能,如如何 发送/接收cookies,POST/GET数据,网页头信息等设置。更多内容参考PHP手册。

另外最好有 IE的Http watch工具,用于抓取HTTP传输的包信息,非常好用,是互联网开发强力工具,推荐使用。

步骤1,用IE的Http watch抓取登录和插入图片的包:
通过Http watch我们可以清楚的看到要登录51.com只需要,POST用户名密码和一些附带参数即可。另外还有做个cookie操作,以保持登录状态,为后面插入图片准备。
完整的CURL代码如下:

 

 

  1. <?php
  2. $username="weichaoduo";//请改为你的
  3. $password="密码";//请改为你的
  4. echo insert51Blog($username$password);
  5. /**
  6.  * 通过BLOG的 用户名密码以及当前用户名,将3D形象秀FLASH插入到SINA BLOG中
  7.  * @param String $login
  8.  * @param String $password
  9.  * @param String $cur_username
  10.  * @return String "返回状态"
  11.  */
  12. function insert51Blog($login$password,$cur_username)
  13. {
  14.  $cookie_file="";
  15.  $url = "http://passport.51.com/login.5p"
  16.  //POST的数据
  17.  $fields="passport_51_user=$login&passport_51_password=$password&gourl=http%3A%2F%2Fmy.51.com%2Fwebim%2Findex.php%3Frefer%3D%2F&submit.x=47&submit.y=21";
  18.     
  19.  $cookie_file =$login."_cookie.txt"
  20.  $img_url"http://user.guodong.com/j/ji/jia/jiajia/230x330.jpg";
  21.  $modul='[img]'.$img_url.'[/img]';//51插入的格式 
  22.  //第1步 登录
  23.  $ch = curl_init();
  24.  curl_setopt($ch, CURLOPT_URL, $url);  ;
  25.  curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");
  26.  curl_setopt($ch, CURLOPT_POST, 1);                           //以POST方式提交
  27.  curl_setopt($ch, CURLOPT_HEADER, 1);                       //要返回头信息
  28.  curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);         //提交的数据
  29.  curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);  //保存cookie
  30.  curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); //发送cookie 
  31.  curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);        //需要获得返回的内容
  32.  $html = curl_exec($ch);
  33.     //判断是否登录成功 ,如果包含alert说明用户名密码错误
  34.  if(preg_match("/alert/",$html)){
  35.   return "no";//username or password error
  36.  }
  37.    
  38.  //第2步 提交数据
  39.   $submit_url="http://my.51.com/user/userinfointro.php";
  40.   $posts="bulletin=".urlencode($modul)."&action=save"
  41.   curl_setopt($ch, CURLOPT_URL, $submit_url);  
  42.  curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");
  43.  curl_setopt($ch, CURLOPT_POST, 1);
  44.  curl_setopt($ch, CURLOPT_HEADER, 0);
  45.  curl_setopt($ch, CURLOPT_POSTFIELDS, $posts); 
  46.  curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
  47.  curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
  48.  curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
  49.     $html2 = curl_exec($ch);
  50.  //log2($html2,"51.html");//将抓取内容输出至一个文件中
  51.  //如果返回内容包含passport则错误
  52.  if(preg_match("/passport/",$html2)){
  53.   return "no";//username or password error
  54.  }
  55.     return "ok";
  56. }
  57. ?>

执行该脚本后如果返回ok说明插入成功,打开51.com的个人主页: http://home.51.com/weichaoduo 在“自我介绍”,显示了要插入的图片 。

 

:cool::cool::cool::cool::cool::cool:

抱歉!评论已关闭.