PHP获取163、sina、sohu、yahoo、126、gmail、tom邮箱联系人地址

 更新时间:2016年11月25日 16:01  点击:2043
  1. <?php
  2. /**
  3. * @file class.126http.php
  4. * 获得126邮箱通讯录列表
  5. * @author jvones<jvones@gmail.com> http://www.jvones.com/blog
  6. * @date 2009-09-26
  7. **/
  8.  
  9. class http126
  10. {
  11.  
  12.         private function login($username, $password)
  13.         {               
  14.                 //第一步:初步登陆
  15.                 $cookies = array();
  16.                 $ch = curl_init();
  17.                 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  18.                
  19.                 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");
  20.                 curl_setopt($ch, CURLOPT_POST, 1);
  21.                 curl_setopt($ch, CURLOPT_POSTFIELDS, "username=".$username."@126.com&password=".$password);
  22.                
  23.                 curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIEJAR);
  24.                 curl_setopt($ch,CURLOPT_HEADER,1);               
  25.                 curl_setopt($ch, CURLOPT_TIMEOUT, TIMEOUT);
  26.                 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  27.                 $str = curl_exec($ch);        
  28.                 //file_put_contents('./126result.txt', $str);               
  29.                 curl_close($ch);
  30.                         
  31.                 //获取redirect_url跳转地址,可以从126result.txt中查看,通过正则在$str返回流中匹配该地址
  32.                 preg_match("/replace("(.*?)");/", $str, $mtitle);
  33.                 $_url1 = $mtitle[1];
  34.                
  35.                 //file_put_contents('./126resulturl.txt', $redirect_url);        
  36.                 //第二步:再次跳转到到上面$_url1
  37.                 $ch = curl_init($_url1);               
  38.                
  39.                 curl_setopt($ch, CURLOPT_TIMEOUT, TIMEOUT);
  40.                 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  41.                 curl_setopt($ch,CURLOPT_COOKIEFILE,COOKIEJAR);
  42.                 curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIEJAR);               
  43.                 curl_setopt($ch,CURLOPT_HEADER,1);        
  44.                 $str2 = curl_exec($ch);
  45.                 curl_close($ch);
  46.                                                 
  47.                 if (strpos($contents, "安全退出") !== false)
  48.                 {                        
  49.                         return 0;
  50.                 }               
  51.                 return 1;
  52.         }
  53.         
  54.         /**
  55.          * 获取邮箱通讯录-地址
  56.          * @param $user
  57.          * @param $password
  58.          * @param $result
  59.          * @return array
  60.          */
  61.         public function getAddressList($username, $password)
  62.         {               
  63.                 if (!$this->login($username, $password))
  64.                 {
  65.                         return 0;
  66.                 }
  67.             
  68.                 $header = $this->_getheader($username);
  69.                 if (!$header['sid'])
  70.         {
  71.             return 0;
  72.         }
  73.         
  74.         //测试找出sid(很重要)和host
  75.         //file_put_contents('./host.txt', $header['host']);
  76.         //file_put_contents('./sid.txt', $header['sid']);
  77.         
  78.                 //开始进入模拟抓取
  79.                 $ch = curl_init();
  80.                 curl_setopt($ch, CURLOPT_URL, "http://".$header['host']."/a/s?sid=".$header['sid']."&func=global:sequential");
  81.                 curl_setopt($ch, CURLOPT_COOKIEFILE, COOKIEJAR);
  82.                 curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/xml"));
  83.                 $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>";
  84.                 curl_setopt($ch, CURLOPT_POST, 1);
  85.                 curl_setopt($ch, CURLOPT_POSTFIELDS, $str);
  86.                 curl_setopt($ch, CURLOPT_TIMEOUT, TIMEOUT);
  87.                 ob_start();
  88.                 curl_exec($ch);
  89.                 $contents = ob_get_contents();
  90.  
  91.                 ob_end_clean();
  92.                 curl_close($ch);
  93.                
  94.         //get mail list from the page information username && emailaddress
  95.         preg_match_all("/<strings*name="EMAIL;PREF">(.*)</string>/Umsi",$contents,$mails);
  96.         preg_match_all("/<strings*name="FN">(.*)</string>/Umsi",$contents,$names);
  97.         $users = array();
  98.         foreach($names[1] as $k=>$user)
  99.         {
  100.             //$user = iconv($user,'utf-8','gb2312');
  101.             $users[$mails[1][$k]] = $user;
  102.         }
  103.         if (!$users)
  104.         {
  105.             return '您的邮箱中尚未有联系人';
  106.         }      
  107.         
  108.         return $users;
  109.         }
  110.         
  111.         /**
  112.     * Get Header info
  113.     */
  114.     private function _getheader($username)
  115.     {
  116.                 $ch = curl_init();
  117.                 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");
  118.                 curl_setopt($ch, CURLOPT_COOKIEFILE, COOKIEJAR);  //当前使用的cookie
  119.                 curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIEJAR);   //服务器返回的新cookie
  120.                 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  121.                 curl_setopt($ch, CURLOPT_HEADER, true);
  122.                 curl_setopt($ch, CURLOPT_NOBODY, true);
  123.                 $content=curl_exec($ch);
  124.                
  125.                 preg_match_all('/Location:s*(.*?)rn/i',$content,$regs);
  126.         $refer = $regs[1][0];
  127.         preg_match_all('/http://(.*?)//i',$refer,$regs);               
  128.         $host = $regs[1][0];
  129.         preg_match_all("/sid=(.*)/i",$refer,$regs);
  130.         $sid = $regs[1][0];
  131.                
  132.                 curl_close($ch);
  133.                 return array('sid'=>$sid,'refer'=>$refer,'host'=>$host);
  134.     }
  135. }
  136.  
  137. ?>

<?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

[!--infotagslink--]

相关文章

  • PHP成员变量获取对比(类成员变量)

    下面本文章来给大家介绍在php中成员变量的一些对比了,文章举了四个例子在这例子中分别对不同成员变量进行测试与获取操作,下面一起来看看。 有如下4个代码示例,你认...2016-11-25
  • php 获取用户IP与IE信息程序

    php 获取用户IP与IE信息程序 function onlineip() { global $_SERVER; if(getenv('HTTP_CLIENT_IP')) { $onlineip = getenv('HTTP_CLIENT_IP');...2016-11-25
  • php获取一个文件夹的mtime的程序

    php获取一个文件夹的mtime的程序了,这个就是时间问题了,对于这个问题我们来看小编整理的几个例子,具体的操作例子如下所示。 php很容易获取到一个文件夹的mtime,可以...2016-11-25
  • 如何获取网站icon有哪些可行的方法

    获取网站icon,常用最简单的方法就是通过website/favicon.ico来获取,不过由于很多网站都是在页面里面设置favicon,所以此方法很多情况都不可用。 更好的办法是通过google提供的服务来实现:http://www.google.com/s2/favi...2014-06-07
  • jquery如何获取元素的滚动条高度等实现代码

    主要功能:获取浏览器显示区域(可视区域)的高度 : $(window).height(); 获取浏览器显示区域(可视区域)的宽度 :$(window).width(); 获取页面的文档高度 $(document).height(); 获取页面的文档宽度 :$(document).width();...2015-10-21
  • jquery获取div距离窗口和父级dv的距离示例

    jquery中jquery.offset().top / left用于获取div距离窗口的距离,jquery.position().top / left 用于获取距离父级div的距离(必须是绝对定位的div)。 (1)先介绍jquery.offset().top / left css: 复制代码 代码如下: *{ mar...2013-10-13
  • Jquery 获取指定标签的对象及属性的设置与移除

    1、先讲讲JQuery的概念,JQuery首先是由一个 America 的叫什么 John Resig的人创建的,后来又很多的JS高手也加入了这个团队。其实 JQuery是一个JavaScript的类库,这个类库集合了很多功能方法,利用类库你可以用简单的一些代...2014-05-31
  • C#获取字符串后几位数的方法

    这篇文章主要介绍了C#获取字符串后几位数的方法,实例分析了C#操作字符串的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • jquery获取tagName再进行判断

    如果是为了取到tagName后再进行判断,那直接用下面的代码会更方便: $(element).is('input') 如果是要取到标签用作到别的地方,可以使用一下代码: $(element)[0].tagName 或: $(element).get(0).tagName...2014-05-31
  • DOM XPATH获取img src值的query

    复制代码 代码如下:$nodes = @$xpath->query("//*[@id='main_pr']/img/@src");$prurl = $nodes->item(0)->nodeValue;...2013-10-04
  • c#获取本机的IP地址的代码

    c#获取本机的IP地址的代码,需要的朋友可以参考一下...2020-06-25
  • PHP 如何获取二维数组中某个key的集合

    本文为代码分享,也是在工作中看到一些“大牛”的代码,做做分享。 具体是这样的,如下一个二维数组,是从库中读取出来的。 代码清单: 复制代码 代码如下: $user = array( 0 => array( 'id' => 1, 'name' => '张三', 'ema...2014-06-07
  • php获取汉字拼音首字母的方法

    现实中我们经常看到这样的说明,排名不分先后,按姓名首字母进行排序。这是中国人大多数使用的排序方法。那么在php程序中该如何操作呢?下面就分享一下在php程序中获取汉字拼音的首字母的方法,在网上搜到的大多数是有问题的...2015-10-23
  • 使用C#获取系统特殊文件夹路径的解决方法

    本篇文章是对使用C#获取系统特殊文件夹路径的解决方法进行了详细的分析介绍,需要的朋友参考下...2020-06-25
  • php如何获取文件的扩展名

    网上也有很多类似的方法,不过都存在这样那样的不严谨的问题,本文就不一一分析了,这里只给出最正确的利用php 获取文件扩展名(文件后缀名)的方法。 function get_extension($filename){ return pathinfo($filename,PATHIN...2015-10-30
  • 微信小程序实现选择地址省市区三级联动

    这篇文章主要为大家详细介绍了微信小程序实现选择地址省市区三级联动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-21
  • 基于JavaScript获取鼠标位置的各种方法

    这篇文章主要介绍了基于JavaScript获取鼠标位置的各种方法 ,需要的朋友可以参考下...2015-12-18
  • C#获取变更过的DataTable记录的实现方法

    这篇文章主要介绍了C#获取变更过的DataTable记录的实现方法,对初学者很有学习借鉴价值,需要的朋友可以参考下...2020-06-25
  • 如何获取百度搜索结果页中解密之后的真实链接

    大家用百度搜索的时候,可能会发现,结果链接用的还是百度的链接,点击之后才会跳转到另外一个页面,另外一个页面的真实链接如何获取到呢?? 通过分析发现: 可以看出,返回...2016-05-19
  • 用python获取txt文件中关键字的数量

    这篇文章主要介绍了如何用python获取txt文件中关键字的数量,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下...2020-12-24