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 相关文章推荐
JAVA/JSP学习系列之二
Oct 09 PHP
对Session和Cookie的区分与解释
Mar 16 PHP
在PHP中运行Linux命令并启动SSH服务的例子
Jun 12 PHP
Linux下手动编译安装PHP扩展的例子分享
Jul 15 PHP
php对象在内存中的存在形式分析
Feb 03 PHP
php 使用array函数实现分页
Feb 13 PHP
PHP实现将视频转成MP4并获取视频预览图的方法
Mar 12 PHP
PHP实现验证码校验功能
Nov 16 PHP
php原生数据库分页的代码实例
Feb 18 PHP
docker-compose部署php项目实例详解
Jul 30 PHP
php7性能提升的原因详解
Oct 13 PHP
PHP中SESSION过期设置
Mar 09 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 对输入信息的进行安全过滤的函数代码
2012/06/29 PHP
2014年10个最佳的PHP图像操作库
2014/07/14 PHP
Linux下 php7安装redis的方法
2018/11/01 PHP
通过代码实例解析PHP session工作原理
2020/12/11 PHP
js实现ASP分页函数 HTML分页函数
2006/09/22 Javascript
jQuery DIV弹出效果实现代码
2009/07/03 Javascript
jQuery Flash/MP3/Video多媒体插件
2010/01/18 Javascript
javascript两段代码,两个小技巧
2010/02/04 Javascript
parseInt parseFloat js字符串转换数字
2010/08/01 Javascript
js获取某月的最后一天日期的简单实例
2013/06/22 Javascript
点击显示指定元素隐藏其他同辈元素的方法
2014/02/19 Javascript
node.js实现多图片上传实例
2014/06/03 Javascript
jquery.validate使用时遇到的问题
2015/05/25 Javascript
jquery插件方式实现table查询功能的简单实例
2016/06/06 Javascript
jQuery插件开发发送短信倒计时功能代码
2017/05/09 jQuery
详解React开发中使用require.ensure()按需加载ES6组件
2017/05/12 Javascript
最常用的jQuery表单验证(简单)
2017/05/23 jQuery
es6学习之解构时应该注意的点
2017/08/29 Javascript
Vue+Element UI 树形控件整合下拉功能菜单(tree + dropdown +input)
2020/08/28 Javascript
详解ES6 中的Object.assign()的用法实例代码
2021/01/11 Javascript
python比较两个列表是否相等的方法
2015/07/28 Python
python 内置函数filter
2017/06/01 Python
详解用Python处理HTML转义字符的5种方式
2017/12/27 Python
python制作mysql数据迁移脚本
2019/01/01 Python
python实现扫描局域网指定网段ip的方法
2019/04/16 Python
Python脚本操作Excel实现批量替换功能
2019/11/20 Python
python调用有道智云API实现文件批量翻译
2020/10/10 Python
HTML5实现直播间评论滚动效果的代码
2020/05/27 HTML / CSS
车队司机自我鉴定
2014/03/02 职场文书
自我鉴定总结
2014/03/24 职场文书
激励口号大全
2014/06/17 职场文书
2014年校长工作总结
2014/12/11 职场文书
财务部岗位职责
2015/02/03 职场文书
mysql查询的控制语句图文详解
2021/04/11 MySQL
go类型转换及与C的类型转换方式
2021/05/05 Golang
vue+springboot实现登录验证码
2021/05/27 Vue.js