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代码如下:
- <?php
- $username="weichaoduo";//请改为你的
- $password="密码";//请改为你的
- echo insert51Blog($username, $password);
- /**
- * 通过BLOG的 用户名密码以及当前用户名,将3D形象秀FLASH插入到SINA BLOG中
- * @param String $login
- * @param String $password
- * @param String $cur_username
- * @return String "返回状态"
- */
- function insert51Blog($login, $password,$cur_username)
- {
- $cookie_file="";
- $url = "http://passport.51.com/login.5p";
- //POST的数据
- $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";
- $cookie_file =$login."_cookie.txt";
- $img_url= "http://user.guodong.com/j/ji/jia/jiajia/230x330.jpg";
- $modul='[img]'.$img_url.'[/img]';//51插入的格式
- //第1步 登录
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_URL, $url); ;
- curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");
- curl_setopt($ch, CURLOPT_POST, 1); //以POST方式提交
- curl_setopt($ch, CURLOPT_HEADER, 1); //要返回头信息
- curl_setopt($ch, CURLOPT_POSTFIELDS, $fields); //提交的数据
- curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file); //保存cookie
- curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); //发送cookie
- curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); //需要获得返回的内容
- $html = curl_exec($ch);
- //判断是否登录成功 ,如果包含alert说明用户名密码错误
- if(preg_match("/alert/",$html)){
- return "no";//username or password error
- }
- //第2步 提交数据
- $submit_url="http://my.51.com/user/userinfointro.php";
- $posts="bulletin=".urlencode($modul)."&action=save";
- curl_setopt($ch, CURLOPT_URL, $submit_url);
- curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");
- curl_setopt($ch, CURLOPT_POST, 1);
- curl_setopt($ch, CURLOPT_HEADER, 0);
- curl_setopt($ch, CURLOPT_POSTFIELDS, $posts);
- curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
- curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
- $html2 = curl_exec($ch);
- //log2($html2,"51.html");//将抓取内容输出至一个文件中
- //如果返回内容包含passport则错误
- if(preg_match("/passport/",$html2)){
- return "no";//username or password error
- }
- return "ok";
- }
- ?>
执行该脚本后如果返回ok说明插入成功,打开51.com的个人主页: http://home.51.com/weichaoduo 在“自我介绍”,显示了要插入的图片 。
:cool::cool::cool::cool::cool::cool: