php curl 登录163邮箱并抓取邮箱好友列表的代码(经测试)


Posted in PHP onApril 07, 2011

CURL技术说白了就是模拟浏览器的动作实现页面抓取或表单提交,通过此技术可以实现许多有去的功能。

<?php 
error_reporting(0); 
//邮箱用户名(不带@163.com后缀的) 
$user = 'papatata_test'; 
//邮箱密码 
$pass = '000000'; 
//目标邮箱 
//$mail_addr = uenucom@163.com'; 
//登陆 
$url = 'http://reg.163.com/logins.jsp?type=1&url=http://entry.mail.163.com/coremail/fcg/ntesdoor2?lightweight%3D1%26verifycookie%3D1%26language%3D-1%26style%3D-1'; 
$ch = curl_init($url); 
//创建一个用于存放cookie信息的临时文件 
$cookie = tempnam('.','~'); 
$referer_login = 'http://mail.163.com'; 
//返回结果存放在变量中,而不是默认的直接输出 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_HEADER, true); 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_REFERER, $referer_login); 
$fields_post = array( 
'username'=> $user, 
'password'=> $pass, 
'verifycookie'=>1, 
'style'=>-1, 
'product'=> 'mail163', 
'selType'=>-1, 
'secure'=>'on' 
); 
$headers_login = array( 
'User-Agent' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/2008052906 Firefox/3.0', 
'Referer' => 'http://www.163.com' 
); 
$fields_string = ''; 
foreach($fields_post as $key => $value) 
{ 
$fields_string .= $key . '=' . $value . '&'; 
} 
$fields_string = rtrim($fields_string , '&'); 
curl_setopt($ch, CURLOPT_COOKIESESSION, true); 
//关闭连接时,将服务器端返回的cookie保存在以下文件中 
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie); 
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers_login); 
curl_setopt($ch, CURLOPT_POST, count($fields)); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string); 
$result= curl_exec($ch); 
curl_close($ch); 
//跳转 
$url='http://entry.mail.163.com/coremail/fcg/ntesdoor2?lightweight=1&verifycookie=1&language=-1&style=-1&username=loki_wuxi'; 
$ch = curl_init($url); 
$headers = array( 
'User-Agent' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/2008052906 Firefox/3.0' 
); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_HEADER, true); 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
//将之前保存的cookie信息,一起发送到服务器端 
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie); 
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie); 
$result = curl_exec($ch); 
curl_close($ch); 
//取得sid 
preg_match('/sid=[^\"].*/', $result, $location); 
$sid = substr($location[0], 4, -1); 
//file_put_contents('./result.txt', $sid); 
//通讯录地址 
$url='http://g4a30.mail.163.com/jy3/address/addrlist.jsp?sid='.$sid.'&gid=all'; 
$ch = curl_init($url); 
$headers = array( 
'User-Agent' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/2008052906 Firefox/3.0' 
); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_HEADER, true); 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie); 
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie); 
$result = curl_exec($ch); 
curl_close($ch); 
//file_put_contents('./result.txt', $result); 
unlink($cookie); 
//开始抓取内容 
preg_match_all('/<td class="Ibx_Td_addrName"><a[^>]*>(.*?)<\/a><\/td><td class="Ibx_Td_addrEmail"><a[^>]*>(.*?)<\/a><\/td>/i', $result,$infos,PREG_SET_ORDER); 
//1:姓名2:邮箱 
print_r($infos); 
?>
PHP 相关文章推荐
删除无限分类并同时删除它下面的所有子分类的方法
Aug 08 PHP
深入PHP5中的魔术方法详解
Jun 17 PHP
php环境套包 dedeampz 伪静态设置示例
Mar 26 PHP
ThinkPHP3.1数据CURD操作快速入门
Jun 19 PHP
使用PHPMailer实现邮件发送代码分享
Oct 23 PHP
基于PHP实现简单的随机抽奖小程序
Jan 05 PHP
PHP实现原比例生成缩略图的方法
Feb 03 PHP
Yii2使用$this-&gt;context获取当前的Module、Controller(控制器)、Action等
Mar 29 PHP
支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
Feb 23 PHP
PHP中Session ID的实现原理实例分析
Aug 17 PHP
phpinfo的知识点总结
Oct 10 PHP
PHP设计模式(观察者模式)
Jul 07 PHP
The specified CGI application misbehaved by not returning a complete set of HTTP headers
Mar 31 #PHP
PHP stream_context_create()作用和用法分析
Mar 29 #PHP
php中突破基于HTTP_REFERER的防盗链措施(stream_context_create)
Mar 29 #PHP
PHP 5.3 下载时 VC9、VC6、Thread Safe、Non Thread Safe的区别分析
Mar 28 #PHP
php中关于普通表单多文件上传的处理方法
Mar 25 #PHP
PHP删除特定数组内容并且重建数组索引的方法.
Mar 25 #PHP
PHP学习 变量使用总结
Mar 24 #PHP
You might like
通过具体程序来理解PHP里面的抽象类
2010/01/28 PHP
php GeoIP的使用教程
2011/03/09 PHP
php 文件上传类代码
2011/08/06 PHP
领悟php接口中interface存在的意义
2013/06/27 PHP
WordPress网站性能优化指南
2015/11/18 PHP
PHP多维数组元素操作类的方法
2016/11/14 PHP
form表单传递数组数据、php脚本接收的实例
2017/02/09 PHP
原型方法的不同写法居然会影响调试的解决方法
2007/03/08 Javascript
用JQuery 实现的自定义对话框
2007/03/24 Javascript
基于jquery的一行代码轻松实现拖动效果
2010/12/28 Javascript
那些年,我还在学习jquery 学习笔记
2012/03/05 Javascript
使用JQuery 加载页面时调用JS的实现方法
2016/05/30 Javascript
Ionic默认的Tabs模板使用实例
2016/08/29 Javascript
微信小程序实战之顶部导航栏(选项卡)(1)
2020/06/19 Javascript
深入理解Vue2.x的虚拟DOM diff原理
2017/09/27 Javascript
vue系列之requireJs中引入vue-router的方法
2018/07/18 Javascript
vue的注意规范之v-if 与 v-for 一起使用教程
2019/08/04 Javascript
Node.js系列之安装配置与基本使用(1)
2019/08/30 Javascript
js实现窗口全屏示例详解
2019/09/17 Javascript
JS实现购物车基本功能
2020/11/08 Javascript
Python中apply函数的用法实例教程
2014/07/31 Python
Python2.x版本中maketrans()方法的使用介绍
2015/05/19 Python
python操作mysql代码总结
2018/06/01 Python
python学习开发mock接口
2019/04/28 Python
python 如何去除字符串头尾的多余符号
2019/11/19 Python
Python 将 QQ 好友头像生成祝福语的实现代码
2020/05/03 Python
pytorch 常用函数 max ,eq说明
2020/06/28 Python
python 实现单例模式的5种方法
2020/09/23 Python
HTML5 Canvas绘制文本及图片的基础教程
2016/03/14 HTML / CSS
迎接领导欢迎词
2014/01/11 职场文书
党员学习十八大感想
2014/01/17 职场文书
业务总经理岗位职责
2014/02/03 职场文书
党的群众路线教育实践活动对照检查剖析材料
2014/10/09 职场文书
同学毕业留言寄语
2015/02/27 职场文书
班主任工作总结范文
2015/08/13 职场文书
Java循环队列与非循环队列的区别总结
2021/06/22 Java/Android