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 相关文章推荐
基于qmail的完整WEBMAIL解决方案安装详解
Oct 09 PHP
MySQL中create table语句的基本语法是
Jan 15 PHP
php xml留言板 xml存储数据的简单例子
Aug 24 PHP
计算一段日期内的周末天数的php代码(星期六,星期日总和)
Nov 12 PHP
memcached 和 mysql 主从环境下php开发代码详解
May 16 PHP
jQuery+php实现ajax文件即时上传的详解
Jun 17 PHP
php获得文件大小和文件创建时间的方法
Mar 13 PHP
php字符串操作常见问题小结
Oct 11 PHP
PHP数组相加操作及与array_merge的区别浅析
Nov 26 PHP
PHP中register_shutdown_function函数的基础介绍与用法详解
Nov 28 PHP
php获取微信共享收货地址的方法
Dec 21 PHP
Laravel 5.4.36中session没有保存成功问题的解决
Feb 19 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
关于使用coreseek并为其做分页的介绍
2013/06/21 PHP
php实现的支持imagemagick及gd库两种处理的缩略图生成类
2014/09/23 PHP
php+mysql查询优化简单实例
2015/01/13 PHP
PHP编程获取图片的主色调的方法【基于Imagick扩展】
2017/08/02 PHP
jQuery实现级联菜单效果(仿淘宝首页菜单动画)
2014/04/10 Javascript
jquery中EasyUI实现同步树
2015/03/01 Javascript
javascript实现仿百度图片的瀑布流加载效果
2016/04/20 Javascript
jQuery获取剪贴板内容的方法
2016/06/16 Javascript
JavaScript DOM节点操作方法总结
2016/08/23 Javascript
Bootstrap模态框禁用空白处点击关闭
2016/10/20 Javascript
VueJS全面解析
2016/11/10 Javascript
AngularJS表单基本操作
2017/01/09 Javascript
angular.js中解决跨域问题的三种方式
2017/07/12 Javascript
Vue 将后台传过来的带html字段的字符串转换为 HTML
2018/03/29 Javascript
webpack+vue-cil中proxyTable处理跨域的方法
2018/07/20 Javascript
React降级配置及Ant Design配置详解
2018/12/27 Javascript
小程序分享模块超级详解(推荐)
2019/04/10 Javascript
JQuery animate动画应用示例
2019/05/14 jQuery
[01:17:55]VGJ.T vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/20 DOTA
基于python requests库中的代理实例讲解
2018/05/07 Python
利用python计算windows全盘文件md5值的脚本
2019/07/27 Python
python文字转语音的实例代码分析
2019/11/12 Python
python 初始化一个定长的数组实例
2019/12/02 Python
使用 Python 写一个简易的抽奖程序
2019/12/08 Python
django数据模型中null和blank的区别说明
2020/09/02 Python
美国第一香水网站:Perfume.com
2017/01/23 全球购物
旅游个人求职信范文
2014/01/30 职场文书
基层党员干部四风问题整改方向和措施
2014/09/25 职场文书
学校感恩节活动策划方案
2014/10/06 职场文书
2014年健康教育工作总结
2014/11/20 职场文书
2015年电工工作总结
2015/04/10 职场文书
百家讲坛观后感
2015/06/12 职场文书
2016高考感言
2015/08/01 职场文书
2016年度师德标兵先进事迹材料
2016/02/26 职场文书
手把手教你使用TensorFlow2实现RNN
2021/07/15 Python
PostgreSQL并行计算算法及参数强制并行度设置方法
2022/04/07 PostgreSQL