我们使用phpmailer登录邮件发邮件也是使用了curl原理来实现模仿用户发邮件了,今天看了两个利用CURL函数登入163邮箱并获取自己的通讯录的例子,希望对各位有帮助。

学习了一些CURL的基础知识并做了这个示例,关于CURL的知识可以从php的官网上查看,点击查看。

示例代码调试方式:把$userName和$password换成自己163邮箱的用户名和密码即可。

注意:用户名和密码一定要正确,否则报错,没有做容错处理。

示例代码如下:

 代码如下 复制代码

//==================账号信息==================

//用户名

$userName = 'xxxxxxxx';

//密码

$password = 'xxxxxxxx';

//邮箱

$email = $userName . '@163.com';

//==================登录==================

//登录地址(登录地址并不是form表单设置的地址,通过js修改了form的action属性,需要查看登录页面源码才能发现)

$loginUrl = "https://ssl.mail.163.com/entry/coremail/fcg/ntesdoor2?df=mail163_letter&from=web&funcid=loginone&iframe=1&language=-1&passtype=1&product=mail163&net=n&style=-1&race=-2_56_-2_hz&uid={$email}";

//登录时发送的post数据(查看form表单,注意有隐藏域)

$postArray = array(

"url2" => "http://mail.163.com/errorpage/error163.htm",

"savelogin" => 0,  "username" => trim($userName), "password" => $password,

);

$postString = '';

foreach($postArray as $key => $value){

$postString .= "{$key}={$value}&";

}

$postString = trim($postString, '&');

//初始化CURL对象

$curl = curl_init();

//设置请求地址

curl_setopt($curl, CURLOPT_URL, $loginUrl);

//禁用后CURL将终止从服务端进行验证

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);

//启用时将获取的信息以文件流的形式返回,而不是直接输出

curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);

//启用时会将头文件的信息作为数据流输出

curl_setopt($curl, CURLOPT_HEADER, TRUE);

//设置POST参数

curl_setopt($curl, CURLOPT_POST, TRUE);

curl_setopt($curl, CURLOPT_POSTFIELDS, $postString);

//执行给定的CURL会话

//成功时返回 TRUE,失败时返回 FALSE

//然而,如果 CURLOPT_RETURNTRANSFER选项被设置,函数执行成功时会返回执行的结果,失败时返回 FALSE

$html = curl_exec($curl);

//把获取到的数据写入文件中以便查看

//file_put_contents('temp1.txt', $html);

//分割头文件和内容

list($head, $content) = explode("\r\n\r\n", $html, 2);

//把获取到的数据写入文件中以便查看

//file_put_contents('temp2.txt', $head);

//file_put_contents('temp3.txt', $content);

$head = explode("\r\n", $head);

//获取cookie信息

$cookieString = '';

foreach ($head as $value){

if(stripos($value, "Set-Cookie: ") !== false){

$cookieString .= str_replace("Set-Cookie: ", "", $value);

}

}

//从content里分析出sid值(读取通讯录信息的参数)

$startString = 'top.location.href = "';

$endString = '";';

$start = strpos($content, $startString);

$end = strpos($content, $endString);

$tempUrl = substr($content, $start strlen($startString), $end - $start - strlen($startString));

$tempUrlVals = parse_url($tempUrl);

parse_str($tempUrlVals['query'], $queryVals);

$sid = $queryVals['sid'];

//==================读取邮箱==================

//读取邮箱地址

$readUrl = "http://twebmail.mail.163.com/contacts/call.do?uid={$email}&sid={$sid}&from=webmail&cmd=newapi.getContacts&vcardver=3.0&ctype=all&attachinfos=yellowpage";

//设置请求地址

curl_setopt($curl, CURLOPT_URL, $readUrl);

//设置POST参数

curl_setopt($curl, CURLOPT_POST, TRUE);

curl_setopt($curl, CURLOPT_POSTFIELDS, 'order=[{"field":"N","desc":"false"}]');

//注意这里要设置从登录操作中获取的cookie

curl_setopt($curl, CURLOPT_COOKIE, $cookieString);

//禁用头文件输出

curl_setopt($curl, CURLOPT_HEADER, FALSE);

//执行给定的CURL会话

//成功时返回 TRUE,失败时返回 FALSE

//然而,如果 CURLOPT_RETURNTRANSFER选项被设置,函数执行成功时会返回执行的结果,失败时返回 FALSE

$content = curl_exec($curl);

//把获取到的数据写入文件中以便查看

//file_put_contents('temp4.txt', $content);

//关闭一个CURL会话,并释放资源

curl_close($curl);

echo '

';

print_r(json_decode($content, true));

echo '

';

例子二,这个更高级一些可以输入信息

 代码如下 复制代码
登陆163邮箱

用户名:

密码:

mail.php

 代码如下 复制代码

define("COOKIEJAR",ini_get( "upload_tmp_dir" ).DIRECTORY_SEPARATOR."cookie.txt");

if( !isset($_POST['username']) || !isset($_POST['username']) ){

echo 'ERROR QUEST';

exit();

}

$username = $_POST['username'];

$pos = strrpos($username,'@');

if($pos === false){

$username .= "@163.com";

}

$password = $_POST['password'];

//登陆163邮箱,获得登陆后的cookie

$options = array(

CURLOPT_URL => "https://reg.163.com/logins.jsp",

CURLOPT_SSL_VERIFYPEER => false,

CURLOPT_POST => 1,

CURLOPT_POSTFIELDS => "username=".$username."&password=".$password,

CURLOPT_COOKIEJAR => COOKIEJAR,

);

curl_quest($options);

//利用上一步获得的cookie进一步取得cookie

$options2 = array(

CURLOPT_URL => "http://fm163.163.com/coremail/fcg/ntesdoor2?verifycookie=1&lightweight=1",

CURLOPT_COOKIEFILE => COOKIEJAR,

CURLOPT_COOKIEJAR => COOKIEJAR,

);

curl_quest($options2);

//分析cookie文件,取得coremail.

$cookiefile = file_get_contents(COOKIEJAR);

preg_match('|Coremail.*?%(\S*)|',$cookiefile,$sid);

//发送获得通讯录xml请求.

$postStr3 = '<?xml version="1.0"?>pab:searchContacts

>FN

>true

user:getSignatures

>

pab:getAllGroups';

$options3 = array(

CURLOPT_URL => 'http://eg1a120.mail.163.com/a/s?sid='.$sid[1].'&func=global:sequential',

CURLOPT_HTTPHEADER => array('Content-Type: application/xml'),

CURLOPT_POST => 1,

CURLOPT_COOKIEFILE => COOKIEJAR,

CURLOPT_POSTFIELDS => $postStr3,

CURLOPT_REFERER => 'http://eg1a120.mail.163.com/a/f/js3/0811050934/index_v12.htm',

);

$mailsxml = curl_quest($options3,true);

//输出获得的通讯录xml

header("Content-Type: application/xml");

echo $mailsxml;

function curl_quest($ops,$return = false){

$ch = curl_init();

curl_setopt_array($ch,$ops);

ob_start( );

curl_exec($ch);

if($return){

$content=ob_get_contents();

}

curl_close($ch);

ob_end_clean();

if($return){

return $content;

}

}

?>

php curl登陆邮箱,php利用CURL函数登入163邮箱并获取自己的通讯录相关推荐

  1. 如何在iOS上登入163邮箱

    一般我们直接在iPhone上设置163的账号总是说无法接受邮件,非常麻烦,后来在查询后,解决方法如下. 1)登入163邮箱,点击菜单栏中的 <设置>,然后在左侧找到<客户端授权密码& ...

  2. 163vip邮箱账号登录入口在哪儿?163邮箱登录不了怎么办?

    生活不止眼前的苟且,还有诗和远方-初入职场的你可能连办公软件都不能熟练使用,邮箱登录地址不清楚怎么写.不晓得163vip邮箱账号登录入口在哪儿.不知道邮箱登录不了该怎么办.更不知道发错邮件该怎么办,到 ...

  3. 163邮箱登录入口你知道吗?163邮箱登录方法大全

    随着社会科学技术的发展,我们的交流方式也变得越来越便捷,从BB机到手机,从传真到电子邮件都我们的沟通方式都发生了翻天覆地的变化,今天我们就来讲一下电子邮箱的发展, 以及几种TOM VIP邮箱登录入口的 ...

  4. 关于浏览器无法登入QQ邮箱

    近期谷歌浏览器登入QQ邮箱,总是登入不上去,显示cookie不正常之类的,通过一番折腾找到解决办法:修改电脑网络DNS 公共DNS推荐谷歌的DNS(8.8.8.8和8.8.4.4)或114(114.1 ...

  5. php抓取curl下载文件,PHP 利用 Curl 函数实现多线程抓取网页和下载文件

    PHP 利用 Curl Functions 可以完成各种传送文件操作,比如模拟浏览器发送GET,POST请求等等,然而因为php语言本身不支持多线程,所以开发爬虫程序效率并不高,因此经常需要借助Cur ...

  6. php curl 模拟多线程,php利用curl 多线程 模拟 并发的详解

    php利用curl 多线程 模拟 并发的详解 发布于 2014-12-07 10:17:25 | 265 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: Hypert ...

  7. 163邮箱登录入口大全,你知道163邮箱登录入口怎么登录吗?

    最近有很多朋友问我163邮箱登录入口在哪里可以找到,说是想登录163邮箱但是因为找不到163邮箱登录入口,所以迟迟登录不上自己的邮箱,那么你知道163邮箱怎么登录吗,你知道TOM VIP邮箱和免费邮箱 ...

  8. QQ邮箱停运,如何使用网易163邮箱实现邮件发送。

    事件起因 腾讯突然宣布:QQ 邮箱群将于 12 月 10 日终止服务 解决方案 使用网易邮箱 163邮箱 具体操作 注册网易邮箱大师 注册具体的邮箱 如 houdu12345@163.com 登录网页 ...

  9. curl不通 k8s_如何利用curl命令访问Kubernetes API server

    API 请求必须使用 JSON 格式来发送.kubectl 的作用是将 yaml 转换为 JSON 格式进行 API 请求. 1.我们从查看 kubectl 的配置文件开始,需要:三个证书和 API ...

最新文章

  1. 教你如何更优雅的设计Java异常
  2. C++ string详解
  3. Python入门100题 | 第044题
  4. 自己动手利用KVM和Intel VT实现简单虚拟机
  5. 怎么钢枪_这样玩《和平精英》有手就能上皇冠?教你玩吃鸡怎么涨KD
  6. [Unity][NodeCanvas] 点击场景中的游戏对象以观察行为树运行情况
  7. java文件上传总结
  8. cakephp2.0 Utility class 简介
  9. 东大OJ-1544: GG的战争法则
  10. 泛函编程(29)-泛函实用结构:Trampoline-不再怕StackOverflow
  11. Linux wpa_cli 调试方法
  12. 奇怪的问题:为什么手机过一年就变得很慢?
  13. iOS 开发全能工具箱
  14. 搭建安卓开发环境并测试运行安卓开发环境
  15. 今日科技联播:滴滴5000亿上市计划或受影响,高德地图暂时下线顺风车业务
  16. cad2017单段线_CAD将线段分成多段线的方法步骤
  17. iOS开发脚踏实地学习day14-绘图
  18. 工具篇之HBuilderX使用教程
  19. 三年磨一剑大话数据结构——数据结构起源、概念和术语
  20. MySQL查询优化与调优

热门文章

  1. python-pycharm控制台输出带颜色
  2. Arrays类的排序(sort、parallelsort)
  3. python 弹出对话框_python+selenium 抓取弹出对话框信息
  4. 作者:向阳,男,同济大学教授、博士生导师。
  5. 浮点高精求和(洛谷P2393题题解,弃坑Java拥抱C++)
  6. .net 事务处理的三种方法
  7. Tomcat启动过程源码解读
  8. Struts2与Struts1的区别
  9. 升级python以及安装anaconda
  10. 老王的心路历程(二):下一站Web体验监控产品