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 地址栏信息的获取代码
Jan 07 PHP
php的array_multisort()使用方法介绍
May 16 PHP
深入解析PHP 5.3.x 的strtotime() 时区设定 警告信息修复
Aug 05 PHP
easyui的tabs update正确用法分享
Mar 21 PHP
排序算法之PHP版快速排序、冒泡排序
Apr 09 PHP
ThinkPHP使用心得分享-上传类UploadFile的使用
May 15 PHP
浅谈Laravel队列实现原理解决问题记录
Aug 19 PHP
PHP封装的验证码工具类定义与用法示例
Aug 22 PHP
详解php中生成标准uuid(guid)的方法
Apr 28 PHP
Yii2框架加载css和js文件的方法分析
May 25 PHP
解决laravel资源加载路径设置的问题
Oct 14 PHP
PHP强制转化的形式整理
May 22 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
重置版游戏视频
2020/04/09 魔兽争霸
解析thinkphp基本配置 convention.php
2013/06/18 PHP
php根据isbn书号查询amazon网站上的图书信息的示例
2014/02/13 PHP
PHP执行linux命令常用函数汇总
2016/02/02 PHP
php ajax实现文件上传进度条
2016/03/29 PHP
PHP简单实现上一页下一页功能示例
2016/09/14 PHP
Laravel 集成 Geetest验证码的方法
2018/05/14 PHP
仿校内登陆框,精美,给那些很厉害但是没有设计天才的程序员
2008/11/24 Javascript
js关闭模态窗口刷新父页面或跳转页面
2012/12/13 Javascript
简单谈谈javascript代码复用模式
2015/01/28 Javascript
Javascript中拼接大量字符串的方法
2015/02/05 Javascript
JavaScript性能优化之小知识总结
2015/11/20 Javascript
轻松学习jQuery插件EasyUI EasyUI实现拖动基本操作
2015/11/30 Javascript
javascript每日必学之多态
2016/02/23 Javascript
js实现统计字符串中特定字符出现个数的方法
2016/08/02 Javascript
通过npm引用的vue组件使用详解
2017/03/02 Javascript
nodejs入门教程一:概念与用法简介
2017/04/24 NodeJs
JS匿名函数和匿名自执行函数概念与用法分析
2018/03/16 Javascript
node 命令方式启动修改端口的方法
2018/05/12 Javascript
jQuery序列化form表单数据为JSON对象的实现方法
2018/09/20 jQuery
vue路由缓存的几种实现方式小结
2020/02/02 Javascript
react基本安装与测试示例
2020/04/27 Javascript
解决在Vue中使用axios POST请求变成OPTIONS的问题
2020/08/14 Javascript
python网络编程之读取网站根目录实例
2014/09/30 Python
pandas DataFrame 根据多列的值做判断,生成新的列值实例
2018/05/18 Python
pytorch对可变长度序列的处理方法详解
2018/12/08 Python
Python基本类型的连接组合和互相转换方式(13种)
2019/12/16 Python
金讯Java笔试题目
2013/06/18 面试题
2015年维修电工工作总结
2015/04/25 职场文书
刑事辩护词范文
2015/05/21 职场文书
离婚代理词范文
2015/05/23 职场文书
重阳节活动主持词
2015/07/04 职场文书
九年级英语教学反思
2016/02/15 职场文书
六年级数学教学反思
2016/02/16 职场文书
浅谈由position属性引申的css进阶讨论
2021/05/25 HTML / CSS
java协程框架quasar和kotlin中的协程对比分析
2022/02/24 Java/Android