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 相关文章推荐
PHP批量生成缩略图的代码
Jul 19 PHP
php 购物车的例子
May 04 PHP
CI映射(加载)数据到view层的方法
Mar 28 PHP
java模拟PHP的pack和unpack类
Apr 13 PHP
Yii2如何批量添加数据
May 17 PHP
php 使用curl模拟登录人人(校内)网的简单实例
Jun 06 PHP
PHP中register_shutdown_function函数的基础介绍与用法详解
Nov 28 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
Dec 25 PHP
利用Laravel生成Gravatar头像地址的优雅方法
Dec 30 PHP
ThinkPHP5分页paginate代码实例解析
Nov 10 PHP
php中配置文件保存修改操作 如config.php文件的读取修改等操作
May 12 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
Access数据库导入Mysql的方法之一
2006/10/09 PHP
dedecms模版制作使用方法
2007/04/03 PHP
php 获取可变函数参数的函数
2009/08/26 PHP
php之XML转数组函数的详解
2013/06/07 PHP
PHP CURL或file_get_contents获取网页标题的代码及两者效率的稳定性问题
2015/11/30 PHP
PHP根据session与cookie用户登录状态操作类的代码
2016/05/13 PHP
[HTML/CSS/Javascript]WWTJS
2007/09/25 Javascript
Extjs学习笔记之七 布局
2010/01/08 Javascript
javascript中类的定义及其方式(《javascript高级程序设计》学习笔记)
2011/07/04 Javascript
javascript 文本框水印/占位符(watermark/placeholder)实现方法
2012/01/15 Javascript
jQuery实现form表单reset按钮重置清空表单功能
2012/12/18 Javascript
Extjs 4.x 得到form CheckBox 复选框的值
2014/05/04 Javascript
jQuery学习笔记之Ajax用法实例详解
2015/12/01 Javascript
Jquery左右滑动插件之实现超级炫酷动画效果附源码下载
2015/12/02 Javascript
jQuery手风琴的简单制作
2017/05/12 jQuery
浅谈Vue.js路由管理器 Vue Router
2018/08/16 Javascript
微信小程序如何实现五星评价功能
2019/10/15 Javascript
angular8.5集成TinyMce5的使用和详细配置(推荐)
2020/11/16 Javascript
使用python实现扫描端口示例
2014/03/29 Python
Python 模块EasyGui详细介绍
2017/02/19 Python
浅析Python 读取图像文件的性能对比
2019/03/07 Python
python使用selenium实现批量文件下载
2019/03/11 Python
Python如何调用外部系统命令
2019/08/07 Python
Pytorch 实现自定义参数层的例子
2019/08/17 Python
Django如何继承AbstractUser扩展字段
2020/11/27 Python
库存图片、照片、矢量图、视频和音乐:Shutterstock
2021/02/12 全球购物
意大利和国际奢侈品牌购物网站:Suitnegozi.com
2021/01/15 全球购物
通信专业个人自我鉴定
2013/10/21 职场文书
学生会主席就职演讲稿
2014/01/14 职场文书
上课迟到检讨书
2014/02/19 职场文书
给全校老师的建议书
2014/03/13 职场文书
飘柔洗发水广告词
2014/03/14 职场文书
商业门面租房协议书
2014/11/25 职场文书
《家》读后感:万惜拯救,冷暖自知
2019/09/25 职场文书
手把手教你用SpringBoot将文件打包成zip存放或导出
2021/06/11 Java/Android
Go语言安装并操作redis的go-redis库
2022/04/14 Golang