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 相关文章推荐
Discuz 模板引擎的封装类代码
Jul 18 PHP
php 什么是PEAR?
Mar 19 PHP
PHP 文件上传源码分析(RFC1867)
Oct 30 PHP
PHP 函数学习简单小结
Jul 08 PHP
用php随机生成福彩双色球号码的2种方法
Feb 04 PHP
mantis安装、配置和使用中的问题小结
Jul 14 PHP
PHP常用数组函数介绍
Jul 28 PHP
php实现给图片加灰色半透明效果的方法
Oct 20 PHP
php生成随机颜色方法汇总
Dec 03 PHP
PHP单例模式详细介绍
Jul 01 PHP
php7基于递归实现删除空文件夹的方法示例
Jun 15 PHP
php使用gearman进行任务分发操作实例详解
Feb 26 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中使用addslashes函数报错问题的解决方法
2013/02/06 PHP
PHP、Python和Javascript的装饰器模式对比
2015/02/03 PHP
神奇的代码 通杀各种网站-可随意修改复制页面内容
2008/07/17 Javascript
20款效果非常棒的 jQuery 插件小结分享
2011/11/18 Javascript
浅析JQuery获取和设置Select选项的常用方法总结
2013/07/04 Javascript
基于Jquery实现表单验证
2020/07/20 Javascript
JQUERY表单暂存功能插件分享
2016/02/23 Javascript
关于JSON与JSONP简单总结
2016/08/16 Javascript
微信公众号-获取用户信息(网页授权获取)实现步骤
2016/10/21 Javascript
javascript 闭包详解及简单实例应用
2016/12/31 Javascript
jquery实现提示语淡入效果
2017/05/05 jQuery
ES6学习教程之模板字符串详解
2017/10/09 Javascript
详解Nuxt.js Vue服务端渲染摸索
2018/02/08 Javascript
利用hasOwnProperty给数组去重的面试题分享
2018/11/05 Javascript
Vue数据绑定实例写法
2019/08/06 Javascript
微信小程序实现手势滑动效果
2019/08/26 Javascript
稍微学一下Vue的数据响应式(Vue2及Vue3区别)
2019/11/21 Javascript
vue项目页面嵌入代码块vue-prism-editor的实现
2020/10/30 Javascript
vue 计算属性和侦听器的使用小结
2021/01/25 Vue.js
[57:12]完美世界DOTA2联赛循环赛 Inki vs Matador BO2第一场 10.31
2020/11/02 DOTA
python字符串排序方法
2014/08/29 Python
Python实现配置文件备份的方法
2015/07/30 Python
基于python yield机制的异步操作同步化编程模型
2016/03/18 Python
用Python识别人脸,人种等各种信息
2019/07/15 Python
python 导入数据及作图的实现
2019/12/03 Python
python 绘制场景热力图的示例
2020/09/23 Python
基于HTML5 Canvas 实现商场监控实例详解
2017/11/20 HTML / CSS
SteelSeries赛睿官网:游戏外设和配件的领先制造商(耳机、键盘、鼠标和鼠标垫)
2018/06/17 全球购物
C语言笔试题
2014/09/04 面试题
大学生学习生活的自我评价
2013/11/01 职场文书
语文高效课堂实施方案
2014/05/03 职场文书
宣传标语大全
2014/07/01 职场文书
新农村建设汇报材料
2014/08/15 职场文书
三潭印月的导游词
2015/02/12 职场文书
安全保证书怎么写
2015/02/28 职场文书
我的兄弟姐妹观后感
2015/06/15 职场文书