2012-3-24 经测试可正常使用
<?php error_reporting(0); define("COOKIEJAR", tempnam(ini_get("upload_tmp_dir"), "cookie")); //定义COOKIES存放的路径,要有操作的权限 define("TIMEOUT", 10000); //超时设定 /** * author : 郭钱 */ $contacts = new sohu(); $lists = $contacts->getcontacts('email@sohu.com', 'password', $result); var_dump($lists); class sohu { function checklogin($user, $password) { $ch = curl_init( ); $url = "http://passport.sohu.com/sso/login.jsp"; $url = $url . "?userid=" . urlencode($user); $url = $url . "&password=" . md5($password); $url = $url . "&appid=1000&persistentcookie=0&s=" . time() . "&b=1&w=1024&pwdtype=1"; curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIEJAR); curl_setopt($ch, CURLOPT_TIMEOUT, TIMEOUT); ob_start( ); curl_exec($ch); $contents = ob_get_contents( ); ob_end_clean( ); curl_close($ch); if (strpos($contents, "success") === false) { return 0; } return 1; } function getcontacts($user, $password, &$result) { if (!$this->checklogin($user, $password)) { return '登陆失败'; } $cookies = array(); $bRet = $this->readcookies(COOKIEJAR, $cookies); if (!$bRet && !$cookies['JSESSIONID']) { return '读取cookie失败'; } $ch = curl_init( ); curl_setopt($ch, CURLOPT_COOKIEFILE, COOKIEJAR); curl_setopt($ch, CURLOPT_TIMEOUT, TIMEOUT); curl_setopt($ch, CURLOPT_URL, "http://mail.sohu.com/bapp/86/main#addressList"); ob_start( ); curl_exec($ch); $content = ob_get_contents( ); ob_end_clean( ); curl_close($ch); $bRet = $this->_parsedata($content); return $bRet; } function _parsedata($content) { preg_match_all("/var addresses = '(.*)';/Umsi", $content, $data); $numList = json_decode($data[1][0], true); $contactList = array(); foreach ($numList['contact'] as $val) { $obj['name'] = $val['nickname']; $obj['nickname'] = $val['pinyin']; $obj['email'] = $val['email']; if ($obj['nickname'] == "") { $obj['nickname'] = $$obj['name']; } $contactList[] = $obj; } if (!$contactList) { return CONTACT_ERROR; } else { return $contactList; } } function readcookies($file, &$result) { $fp = fopen($file, "r"); while (!feof($fp)) { $buffer = fgets($fp, 4096); $tmp = split("\t", $buffer); $result[trim($tmp[5])] = trim($tmp[6]); } return 1; } } ?>