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下将图片以二进制存入mysql数据库中并显示的实现代码
May 27 PHP
php IP转换整形(ip2long)的详解
Jun 06 PHP
一些php项目中比较通用的php自建函数的详解
Jun 06 PHP
PHP获取当前日期所在星期(月份)的开始日期与结束日期(实现代码)
Jun 18 PHP
php实现复制移动文件的方法
Jul 29 PHP
PHP内核探索:哈希表碰撞攻击原理
Jul 31 PHP
用php和jQuery来实现“顶”和“踩”的投票功能
Oct 13 PHP
PHP判断表达式中括号是否匹配的简单实例
Oct 22 PHP
PHP实现十进制、二进制、八进制和十六进制转换相关函数用法分析
Apr 25 PHP
PHP whois查询类定义与用法示例
Apr 03 PHP
PHP中Static(静态)关键字功能与用法实例分析
Apr 05 PHP
Laravel服务容器绑定的几种方法总结
Jun 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
极典R601SW收音机
2021/03/02 无线电
我的论坛源代码(三)
2006/10/09 PHP
在windows服务器开启php的gd库phpinfo中未发现
2013/01/13 PHP
PHP实现打包zip并下载功能
2018/06/12 PHP
深入理解PHP+Mysql分布式事务与解决方案
2020/12/03 PHP
动态加载外部javascript文件的函数代码分享
2011/07/28 Javascript
纯js网页画板(Graphics)类简介及实现代码
2012/12/24 Javascript
js将控件隐藏及display属性的使用介绍
2013/12/30 Javascript
深入浅析AngularJS中的module(模块)
2016/01/04 Javascript
javascript日期比较方法实例分析
2016/06/17 Javascript
jQuery 检查某个元素在页面上是否存在实例代码
2016/10/27 Javascript
JavaScript浏览器对象模型BOM(BrowserObjectModel)实例详解
2016/11/29 Javascript
ES6正则的扩展实例详解
2017/04/25 Javascript
深入理解Nodejs Global 模块
2017/06/03 NodeJs
一步步教你利用webpack如何搭一个vue脚手架(超详细讲解和注释)
2018/01/08 Javascript
javascript(基于jQuery)实现鼠标获取选中的文字示例【测试可用】
2019/10/26 jQuery
如何基于filter实现网站整体变灰功能
2020/04/17 Javascript
解决angular 使用原生拖拽页面卡顿及表单控件输入延迟问题
2020/04/21 Javascript
利用JavaScript模拟京东按键输入功能
2020/12/01 Javascript
简单的通用表达式求10乘阶示例
2014/03/03 Python
Python版微信红包分配算法
2015/05/04 Python
九步学会Python装饰器
2015/05/09 Python
Python基于ThreadingTCPServer创建多线程代理的方法示例
2018/01/11 Python
Python排序算法之选择排序定义与用法示例
2018/04/29 Python
Python中filter与lambda的结合使用详解
2019/12/24 Python
python GUI库图形界面开发之PyQt5开发环境配置与基础使用
2020/02/25 Python
python GUI库图形界面开发之PyQt5窗口控件QWidget详细使用方法
2020/02/26 Python
浅谈Python里面None True False之间的区别
2020/07/09 Python
Python并发爬虫常用实现方法解析
2020/11/19 Python
我们是伦敦女孩:WalG
2018/01/08 全球购物
火山动力Java笔试题
2014/06/26 面试题
农林环境专业求职信
2014/03/13 职场文书
党员国庆节演讲稿范文2014
2014/09/21 职场文书
golang json数组拼接的实例
2021/04/28 Golang
浅谈PostgreSQL表分区的三种方式
2021/06/29 PostgreSQL
SpringBoot整合RabbitMQ的5种模式实战
2021/08/02 Java/Android