PHP获取163、sina、sohu、yahoo、126、gmail、tom邮箱联系人地址
- <?php
- /**
- * @file class.126http.php
- * 获得126邮箱通讯录列表
- * @author jvones<jvones@gmail.com> http://www.jvones.com/blog
- * @date 2009-09-26
- **/
- class http126
- {
- private function login($username, $password)
- {
- //第一步:初步登陆
- $cookies = array();
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
- curl_setopt($ch, CURLOPT_URL, "https://reg.163.com/logins.jsp?type=1&product=mail126&url=http://entry.mail.126.com/cgi/ntesdoor?hid%3D10010102%26lightweight%3D1%26verifycookie%3D1%26language%3D0%26style%3D-1");
- curl_setopt($ch, CURLOPT_POST, 1);
- curl_setopt($ch, CURLOPT_POSTFIELDS, "username=".$username."@126.com&password=".$password);
- curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIEJAR);
- curl_setopt($ch,CURLOPT_HEADER,1);
- curl_setopt($ch, CURLOPT_TIMEOUT, TIMEOUT);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
- $str = curl_exec($ch);
- //file_put_contents('./126result.txt', $str);
- curl_close($ch);
- //获取redirect_url跳转地址,可以从126result.txt中查看,通过正则在$str返回流中匹配该地址
- preg_match("/replace("(.*?)");/", $str, $mtitle);
- $_url1 = $mtitle[1];
- //file_put_contents('./126resulturl.txt', $redirect_url);
- //第二步:再次跳转到到上面$_url1
- $ch = curl_init($_url1);
- curl_setopt($ch, CURLOPT_TIMEOUT, TIMEOUT);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
- curl_setopt($ch,CURLOPT_COOKIEFILE,COOKIEJAR);
- curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIEJAR);
- curl_setopt($ch,CURLOPT_HEADER,1);
- $str2 = curl_exec($ch);
- curl_close($ch);
- if (strpos($contents, "安全退出") !== false)
- {
- return 0;
- }
- return 1;
- }
- /**
- * 获取邮箱通讯录-地址
- * @param $user
- * @param $password
- * @param $result
- * @return array
- */
- public function getAddressList($username, $password)
- {
- if (!$this->login($username, $password))
- {
- return 0;
- }
- $header = $this->_getheader($username);
- if (!$header['sid'])
- {
- return 0;
- }
- //测试找出sid(很重要)和host
- //file_put_contents('./host.txt', $header['host']);
- //file_put_contents('./sid.txt', $header['sid']);
- //开始进入模拟抓取
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_URL, "http://".$header['host']."/a/s?sid=".$header['sid']."&func=global:sequential");
- curl_setopt($ch, CURLOPT_COOKIEFILE, COOKIEJAR);
- curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/xml"));
- $str = "<?xml version="1.0"?><object><array name="items"><object><string name="func">pab:searchContacts</string><object name="var"><array name="order"><object><string name="field">FN</string><boolean name="ignoreCase">true</boolean></object></array></object></object><object><string name="func">user:getSignatures</string></object><object><string name="func">pab:getAllGroups</string></object></array></object>";
- curl_setopt($ch, CURLOPT_POST, 1);
- curl_setopt($ch, CURLOPT_POSTFIELDS, $str);
- curl_setopt($ch, CURLOPT_TIMEOUT, TIMEOUT);
- ob_start();
- curl_exec($ch);
- $contents = ob_get_contents();
- ob_end_clean();
- curl_close($ch);
- //get mail list from the page information username && emailaddress
- preg_match_all("/<strings*name="EMAIL;PREF">(.*)</string>/Umsi",$contents,$mails);
- preg_match_all("/<strings*name="FN">(.*)</string>/Umsi",$contents,$names);
- $users = array();
- foreach($names[1] as $k=>$user)
- {
- //$user = iconv($user,'utf-8','gb2312');
- $users[$mails[1][$k]] = $user;
- }
- if (!$users)
- {
- return '您的邮箱中尚未有联系人';
- }
- return $users;
- }
- /**
- * Get Header info
- */
- private function _getheader($username)
- {
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_URL, "http://entry.mail.126.com/cgi/ntesdoor?hid=10010102&lightweight=1&verifycookie=1&language=0&style=-1&username=".$username."@126.com");
- curl_setopt($ch, CURLOPT_COOKIEFILE, COOKIEJAR); //当前使用的cookie
- curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIEJAR); //服务器返回的新cookie
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
- curl_setopt($ch, CURLOPT_HEADER, true);
- curl_setopt($ch, CURLOPT_NOBODY, true);
- $content=curl_exec($ch);
- preg_match_all('/Location:s*(.*?)rn/i',$content,$regs);
- $refer = $regs[1][0];
- preg_match_all('/http://(.*?)//i',$refer,$regs);
- $host = $regs[1][0];
- preg_match_all("/sid=(.*)/i",$refer,$regs);
- $sid = $regs[1][0];
- curl_close($ch);
- return array('sid'=>$sid,'refer'=>$refer,'host'=>$host);
- }
- }
- ?>
<?php
$count = 0;
while(true) {
system('ping qq.com', $retval);
if(!$retval) {
break;
} else {
$count ++;
}
if($count > 10) {
system('shutdown -s -t 60 -f -c "网络不通,60s后关机"', $retval);
}
}
json_encode对中文的处理是有问题的,
1.不能处理GB编码,所有的GB编码都会替换成空字符.
2.utf8编码的中文被编码成unicode编码,相当于javascript的escape函数处理的结果.
为了能正确使用json,首先我们就应该在编码上采用utf8编码,然后再对json_encode的返回结果稍加处理就可以得到正确的结果了。
我写了一个简单的类,将这两个函数包装了一下,
class Json{ public static function encode($str){ $code = json_encode($str); return preg_replace("#\u([0-9a-f]+)#ie", "iconv('UCS-2', 'UTF-8', pack('H4', '\1'))", $code); } public static function decode($str){ return json_decode($str); } } 使用的时候
Json::encode($code); Json::decode($code); 这样可以正确处理utf8编码的中文了。
PS:对于GB编码的中文,我们可以在编码时先转成UTF8编码,再进行编码,解码的时候再进行一个utf8 -> gb的转换就可以了。
另外一般json_encode的结果我们是返回到客户端来使用,我们其实还可以用javascript的unescape函数来对unicode编码的中文进行解码,从而还原成正确的中文。
或者用:$title = mb_convert_encoding($title, 'HTML-ENTITIES', $this->_outCharset);//任意编码下都正常显示
php 自动下载远程服务器文件
<form method="post">
<input name="url" size="50" />
<input name="submit" type="submit" />
</form>
< ?php
// maximum execution time in seconds
set_time_limit (24 * 60 * 60);
if (!isset($_POST['submit'])) die();
// folder to save downloaded files to. must end with slash
$destination_folder = 'temp/';
$url = $_POST['url'];
$newfname = $destination_folder . basename($url);
$file = fopen ($url, "rb");
if ($file) {
$newf = fopen ($newfname, "wb");
if ($newf)
while(!feof($file)) {
fwrite($newf, fread($file, 1024 * 8 ), 1024 * 8 );
}
}
if ($file) {
fclose($file);
}
if ($newf) {
fclose($newf);
}
?>
<?php
//PHP部分:
//取得下拉联动数据
require("conn.php");
$result=mysql_query("SELECT * FROM units LEFT JOIN users ON (users.unit=units.unid)");
$mx=mysql_num_rows($result);
for ($i=0;$i<$mx;$i++) {
$r=mysql_fetch_array($result);
$uname=$r['uname'];
$unid =$r['unid'];
$usname=$r['username'];
$usid=$r['userid'];
if ($lasun!=$uname) {
$java1=$java1 . ""$uname",";
$java2=$java2 . ""$unid",";
$lasun=$uname;
if ($i>0) {
$java3=$java3 . "],[";
$java4=$java4 . "],[";
}
} else {
$java3=$java3 . ",";
$java4=$java4 . ",";
}
$java3= $java3 . ""$usname"";
$java4= $java4 . ""$usid"";
}
$java1="[" . substr_replace($java1,"",-1) . "]n";
$java2="[" . substr_replace($java2,"",-1) . "]n";
$java3="[[" . $java3 . "]]n";
$java4="[[" . $java4 . "]]n";
//javascript部分
?>
<SCRIPT LANGUAGE="JavaScript" DEFER>
var fMenu = <?=$java1?>
var fValue = <?=$java2?>
var sMenu = <?=$java3?>
var sValue = <?=$java4?>
var oWhere = document.all.tar;
var ofMenu = document.createElement("<SELECT name='unid'>");
var osMenu = document.createElement("<SELECT name='usid'>");
with(oWhere)appendChild(ofMenu),appendChild(osMenu);
createMainOptions();
createSubOptions(0);
ofMenu.onchange = function() {createSubOptions(this.selectedIndex);};
function createMainOptions() {
for(var i=0;i<fMenu.length;i++)ofMenu.options[i] = new Option(fMenu[i],fValue[i]);
}
function createSubOptions(j) {
with(osMenu) {
length=0;
for(var i=0;i<sMenu[j].length;i++)osMenu.options[i] = new Option(sMenu[j][i],sValue[j][i]);
}
}
function checkuser() {
if (document.forms[1].elements[1].value=="") { alert("没有选择用户"); return false; }
}
</SCRIPT>
<!-- 在HTML中引用 -->
<div id="tar" style="display:inline"></div>
<!--
另外附users和units数据表结构
表users:
userid
username
unit
表units:
unid
uname
相关文章
- 下面本文章来给大家介绍在php中成员变量的一些对比了,文章举了四个例子在这例子中分别对不同成员变量进行测试与获取操作,下面一起来看看。 有如下4个代码示例,你认...2016-11-25
- php 获取用户IP与IE信息程序 function onlineip() { global $_SERVER; if(getenv('HTTP_CLIENT_IP')) { $onlineip = getenv('HTTP_CLIENT_IP');...2016-11-25
- php获取一个文件夹的mtime的程序了,这个就是时间问题了,对于这个问题我们来看小编整理的几个例子,具体的操作例子如下所示。 php很容易获取到一个文件夹的mtime,可以...2016-11-25
- 获取网站icon,常用最简单的方法就是通过website/favicon.ico来获取,不过由于很多网站都是在页面里面设置favicon,所以此方法很多情况都不可用。 更好的办法是通过google提供的服务来实现:http://www.google.com/s2/favi...2014-06-07
- 主要功能:获取浏览器显示区域(可视区域)的高度 : $(window).height(); 获取浏览器显示区域(可视区域)的宽度 :$(window).width(); 获取页面的文档高度 $(document).height(); 获取页面的文档宽度 :$(document).width();...2015-10-21
- jquery中jquery.offset().top / left用于获取div距离窗口的距离,jquery.position().top / left 用于获取距离父级div的距离(必须是绝对定位的div)。 (1)先介绍jquery.offset().top / left css: 复制代码 代码如下: *{ mar...2013-10-13
- 1、先讲讲JQuery的概念,JQuery首先是由一个 America 的叫什么 John Resig的人创建的,后来又很多的JS高手也加入了这个团队。其实 JQuery是一个JavaScript的类库,这个类库集合了很多功能方法,利用类库你可以用简单的一些代...2014-05-31
- 这篇文章主要介绍了C#获取字符串后几位数的方法,实例分析了C#操作字符串的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
- 如果是为了取到tagName后再进行判断,那直接用下面的代码会更方便: $(element).is('input') 如果是要取到标签用作到别的地方,可以使用一下代码: $(element)[0].tagName 或: $(element).get(0).tagName...2014-05-31
- 复制代码 代码如下:$nodes = @$xpath->query("//*[@id='main_pr']/img/@src");$prurl = $nodes->item(0)->nodeValue;...2013-10-04
- c#获取本机的IP地址的代码,需要的朋友可以参考一下...2020-06-25
- 本文为代码分享,也是在工作中看到一些“大牛”的代码,做做分享。 具体是这样的,如下一个二维数组,是从库中读取出来的。 代码清单: 复制代码 代码如下: $user = array( 0 => array( 'id' => 1, 'name' => '张三', 'ema...2014-06-07
- 现实中我们经常看到这样的说明,排名不分先后,按姓名首字母进行排序。这是中国人大多数使用的排序方法。那么在php程序中该如何操作呢?下面就分享一下在php程序中获取汉字拼音的首字母的方法,在网上搜到的大多数是有问题的...2015-10-23
- 本篇文章是对使用C#获取系统特殊文件夹路径的解决方法进行了详细的分析介绍,需要的朋友参考下...2020-06-25
- 网上也有很多类似的方法,不过都存在这样那样的不严谨的问题,本文就不一一分析了,这里只给出最正确的利用php 获取文件扩展名(文件后缀名)的方法。 function get_extension($filename){ return pathinfo($filename,PATHIN...2015-10-30
- 这篇文章主要为大家详细介绍了微信小程序实现选择地址省市区三级联动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-21
- 这篇文章主要介绍了基于JavaScript获取鼠标位置的各种方法 ,需要的朋友可以参考下...2015-12-18
- 这篇文章主要介绍了C#获取变更过的DataTable记录的实现方法,对初学者很有学习借鉴价值,需要的朋友可以参考下...2020-06-25
- 大家用百度搜索的时候,可能会发现,结果链接用的还是百度的链接,点击之后才会跳转到另外一个页面,另外一个页面的真实链接如何获取到呢?? 通过分析发现: 可以看出,返回...2016-05-19
- 这篇文章主要介绍了如何用python获取txt文件中关键字的数量,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下...2020-12-24