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 中检查或过滤IP地址的实现代码
Nov 27 PHP
通过dbi使用perl连接mysql数据库的方法
Apr 16 PHP
destoon安装出现Internal Server Error的解决方法
Jun 21 PHP
phpcms手机内容页面添加上一篇和下一篇
Jun 05 PHP
PHP实现图片不变型裁剪及图片按比例裁剪的方法
Jan 14 PHP
Zend Framework教程之Zend_Form组件实现表单提交并显示错误提示的方法
Mar 21 PHP
Zend Framework基于Command命令行建立ZF项目的方法
Feb 18 PHP
PHP7新特性之抽象语法树(AST)带来的变化详解
Jul 17 PHP
PHP 7.4中使用预加载的方法详解
Jul 08 PHP
php定期拉取数据对比方法实例
Sep 22 PHP
php5与php7的区别点总结
Oct 11 PHP
PHP number_format函数原理及实例解析
Jul 14 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
使用无限生命期Session的方法
2006/10/09 PHP
PHP 字符串编码截取函数(兼容utf-8和gb2312)
2009/05/02 PHP
Thinkphp中import的几个用法详细介绍
2014/07/02 PHP
php5.5使用PHPMailer-5.2发送邮件的完整步骤
2018/10/14 PHP
PHP5中使用mysqli的prepare操作数据库的介绍
2019/03/18 PHP
php设计模式之适配器模式实例分析【星际争霸游戏案例】
2020/04/07 PHP
javascript 获取select下拉列表值的代码
2009/09/07 Javascript
子窗体与父窗体传值示例js代码
2013/08/01 Javascript
jquery中交替点击事件toggle方法的使用示例
2013/12/08 Javascript
jQuery验证插件validate使用详解
2016/05/11 Javascript
Bootstrap table使用方法详细介绍
2016/12/09 Javascript
Cookies 和 Session的详解及区别
2017/04/21 Javascript
jquery tmpl模板(实例讲解)
2017/09/02 jQuery
JavaScript变量声明var,let.const及区别浅析
2018/04/23 Javascript
解决mpvue + vuex 开发微信小程序vuex辅助函数mapState、mapGetters不可用问题
2018/08/03 Javascript
vue不操作dom实现图片轮播的示例代码
2019/12/18 Javascript
[06:07]辉夜杯现场观众互动 “比谁远送显示器”
2015/12/26 DOTA
8种用Python实现线性回归的方法对比详解
2019/07/10 Python
使用 Python 处理 JSON 格式的数据
2019/07/22 Python
python文件绝对路径写法介绍(windows)
2019/12/25 Python
使用HTML5 Canvas绘制圆角矩形及相关的一些应用举例
2016/03/22 HTML / CSS
HTML5 Canvas玩转酷炫大波浪进度图效果实例(附demo)
2016/12/14 HTML / CSS
详解webapp页面滚动卡顿的解决办法
2018/12/26 HTML / CSS
实现向右循环移位
2014/07/31 面试题
求职简历自我评价范例
2014/03/12 职场文书
《红军不怕远征难》教学反思
2014/04/14 职场文书
产品生产计划书
2014/05/07 职场文书
行政文员实习自我鉴定范文
2014/09/14 职场文书
银行党的群众路线教育实践活动对照检查材料
2014/09/25 职场文书
2015小学教师德育工作总结
2015/05/12 职场文书
学校教学管理制度
2015/08/06 职场文书
2016同学毕业寄语大全
2015/12/04 职场文书
web前端之css水平居中代码解析
2021/05/20 HTML / CSS
Python异常类型以及处理方法汇总
2021/06/05 Python
Vue的列表之渲染,排序,过滤详解
2022/02/24 Vue.js
聊聊配置 Nginx 访问与错误日志的问题
2022/05/25 Servers