php curl登陆邮箱,php利用CURL函数登入163邮箱并获取自己的通讯录
我們使用phpmailer登錄郵件發(fā)郵件也是使用了curl原理來實現(xiàn)模仿用戶發(fā)郵件了,今天看了兩個利用CURL函數(shù)登入163郵箱并獲取自己的通訊錄的例子,希望對各位有幫助。
學(xué)習(xí)了一些CURL的基礎(chǔ)知識并做了這個示例,關(guān)于CURL的知識可以從php的官網(wǎng)上查看,點擊查看。
示例代碼調(diào)試方式:把$userName和$password換成自己163郵箱的用戶名和密碼即可。
注意:用戶名和密碼一定要正確,否則報錯,沒有做容錯處理。
示例代碼如下:
| ?代碼如下 | 復(fù)制代碼 | ||||||||
//==================賬號信息================== //用戶名 $userName = 'xxxxxxxx'; //密碼 $password = 'xxxxxxxx'; //郵箱 $email = $userName . '@163.com'; //==================登錄================== //登錄地址(登錄地址并不是form表單設(shè)置的地址,通過js修改了form的action屬性,需要查看登錄頁面源碼才能發(fā)現(xiàn)) $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}"; //登錄時發(fā)送的post數(shù)據(jù)(查看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(); //設(shè)置請求地址 curl_setopt($curl, CURLOPT_URL, $loginUrl); //禁用后CURL將終止從服務(wù)端進行驗證 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); //啟用時將獲取的信息以文件流的形式返回,而不是直接輸出 curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); //啟用時會將頭文件的信息作為數(shù)據(jù)流輸出 curl_setopt($curl, CURLOPT_HEADER, TRUE); //設(shè)置POST參數(shù) curl_setopt($curl, CURLOPT_POST, TRUE); curl_setopt($curl, CURLOPT_POSTFIELDS, $postString); //執(zhí)行給定的CURL會話 //成功時返回 TRUE,失敗時返回 FALSE //然而,如果 CURLOPT_RETURNTRANSFER選項被設(shè)置,函數(shù)執(zhí)行成功時會返回執(zhí)行的結(jié)果,失敗時返回 FALSE $html = curl_exec($curl); //把獲取到的數(shù)據(jù)寫入文件中以便查看 //file_put_contents('temp1.txt', $html); //分割頭文件和內(nèi)容 list($head, $content) = explode("\r\n\r\n", $html, 2); //把獲取到的數(shù)據(jù)寫入文件中以便查看 //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值(讀取通訊錄信息的參數(shù)) $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"; //設(shè)置請求地址 curl_setopt($curl, CURLOPT_URL, $readUrl); //設(shè)置POST參數(shù) curl_setopt($curl, CURLOPT_POST, TRUE); curl_setopt($curl, CURLOPT_POSTFIELDS, 'order=[{"field":"N","desc":"false"}]'); //注意這里要設(shè)置從登錄操作中獲取的cookie curl_setopt($curl, CURLOPT_COOKIE, $cookieString); //禁用頭文件輸出 curl_setopt($curl, CURLOPT_HEADER, FALSE); //執(zhí)行給定的CURL會話 //成功時返回 TRUE,失敗時返回 FALSE //然而,如果 CURLOPT_RETURNTRANSFER選項被設(shè)置,函數(shù)執(zhí)行成功時會返回執(zhí)行的結(jié)果,失敗時返回 FALSE $content = curl_exec($curl); //把獲取到的數(shù)據(jù)寫入文件中以便查看 //file_put_contents('temp4.txt', $content); //關(guān)閉一個CURL會話,并釋放資源 curl_close($curl); echo ' ';print_r(json_decode($content, true)); echo ' ';例子二,這個更高級一些可以輸入信息
| |||||||||
總結(jié)
以上是生活随笔為你收集整理的php curl登陆邮箱,php利用CURL函数登入163邮箱并获取自己的通讯录的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【实操】深度学习网络万万千,到底怎么把我
- 下一篇: 【Matlab】矩阵中选取任意子矩阵