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 相关文章推荐
人大复印资料处理程序_输入篇
Oct 09 PHP
PHP读取txt文件的内容并赋值给数组的代码
Nov 03 PHP
PHP常用开发函数解析之数组篇[未完结]
Jul 30 PHP
关于ob_get_contents(),ob_end_clean(),ob_start(),的具体用法详解
Jun 24 PHP
php读取目录所有文件信息dir示例
Mar 18 PHP
linux下编译安装memcached服务
Aug 03 PHP
PHP模板引擎smarty详细介绍
May 26 PHP
php实现mysql数据库分表分段备份
Jun 18 PHP
Yii2实现ActiveForm ajax提交
May 26 PHP
PHP7.1实现的AES与RSA加密操作示例
Jun 15 PHP
php基于Redis消息队列实现的消息推送的方法
Nov 28 PHP
Thinkphp集成抖音SDK的实现方法
Apr 28 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
windows的文件系统机制引发的PHP路径爆破问题分析
2014/07/28 PHP
PHP中error_reporting()用法详解
2015/08/31 PHP
PHP页面输出搜索后跳转下一页的处理方法
2016/09/30 PHP
Laravel框架实现model层的增删改查(CURD)操作示例
2018/05/12 PHP
使用 PHP Masked Package 屏蔽敏感数据的实现方法
2019/10/15 PHP
jQuery学习笔记 获取jQuery对象
2012/09/19 Javascript
给js文件传参数(详解)
2014/07/13 Javascript
关于延迟加载JavaScript
2015/05/05 Javascript
jQuery采用连缀写法实现的折叠菜单效果
2015/09/18 Javascript
JS实现的文字与图片定时切换效果代码
2015/10/06 Javascript
JS实现滑动门效果的方法详解
2016/12/19 Javascript
jQuery实现元素的插入
2017/02/27 Javascript
微信小程序-getUserInfo回调的实例详解
2017/10/27 Javascript
JS实现登录页密码的显示和隐藏功能
2017/12/06 Javascript
vue 项目打包通过命令修改 vue-router 模式 修改 API 接口前缀
2018/06/13 Javascript
JavaScript原型对象、构造函数和实例对象功能与用法详解
2018/08/04 Javascript
vue props传值失败 输出undefined的解决方法
2018/09/11 Javascript
js中数组常用方法总结(推荐)
2019/04/09 Javascript
D3.js的基础部分之数组的处理数组的排序和求值(v3版本)
2019/05/09 Javascript
JavaScript实现浏览器网页自动滚动并点击的示例代码
2020/12/05 Javascript
[01:04:20]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第一场 11.29
2020/12/02 DOTA
python中的字典操作及字典函数
2018/01/03 Python
Python面向对象之接口、抽象类与多态详解
2018/08/27 Python
python基于socket实现的UDP及TCP通讯功能示例
2019/11/01 Python
使用python+whoosh实现全文检索
2019/12/09 Python
Skechers越南官方网站:来自美国的运动休闲品牌
2021/02/22 全球购物
支教自我鉴定
2014/01/18 职场文书
《乌塔》教学反思
2014/02/17 职场文书
幼儿生日活动方案
2014/08/27 职场文书
2014年大学生党员自我评议
2014/09/22 职场文书
硕士毕业论文导师评语
2014/12/31 职场文书
资料员岗位职责
2015/02/10 职场文书
党员年度个人总结
2015/02/14 职场文书
围城读书笔记
2015/06/26 职场文书
Netflix《海贼王》真人版剧集多张片场照曝光
2022/04/04 日漫
Docker部署Mysql8的实现步骤
2022/07/07 Servers