溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

怎么在PHP中利用CURL獲取郵箱的地址

發(fā)布時(shí)間:2020-12-29 15:15:17 來(lái)源:億速云 閱讀:154 作者:Leah 欄目:開(kāi)發(fā)技術(shù)

本篇文章給大家分享的是有關(guān)怎么在PHP中利用CURL獲取郵箱的地址,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話(huà)不多說(shuō),跟著小編一起來(lái)看看吧。

 代碼如下:


<?php
  error_reporting ( 0 );
  set_time_limit ( 0 );
  header ( "Content-Type: text/html; charset=GB2312" );

  //郵箱用戶(hù)名密碼
  $user = 'username';
  $pass = 'password';

  //創(chuàng)建一個(gè)文件用于存放cookie信息
  define ( "COOKIEJAR", tempnam ( ini_get ( "upload_tmp_dir" ), "cookie" ) );

  $url = 'http://reg.163.com/logins.jsp?type=1&url=http://entry.mail.163.com/coremail/fcg/ntesdoor2?lightweight%3D1%26verifycookie%3D1%26language%3D-1%26style%3D-1';
  $refer = 'http://mail.163.com';
  $fields_post = array ('username' => $user, 'password' => $pass, 'verifycookie' => 1, 'style' => - 1, 'product' => 'mail163', 'selType' => - 1, 'secure' => 'on' );
  $fields_string = http_build_query ( $fields_post, '&' );
  $headers_login = array ('User-Agent' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/2008052906 Firefox/3.0', 'Referer' => 'http://www.163.com' );

  //登錄
  $ch = curl_init ( $url );
  curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true );
  curl_setopt ( $ch, CURLOPT_HEADER, true );
  curl_setopt ( $ch, CURLOPT_CONNECTTIMEOUT, 120 );
  curl_setopt ( $ch, CURLOPT_POST, true );
  curl_setopt ( $ch, CURLOPT_REFERER, $refer );
  curl_setopt ( $ch, CURLOPT_COOKIESESSION, true );
  curl_setopt ( $ch, CURLOPT_COOKIEJAR, COOKIEJAR );
  curl_setopt ( $ch, CURLOPT_HTTPHEADER, $headers_login );
  curl_setopt ( $ch, CURLOPT_POST, count ( $fields ) );
  curl_setopt ( $ch, CURLOPT_POSTFIELDS, $fields_string );
  $result = curl_exec ( $ch );
  curl_close ( $ch );

  //跳轉(zhuǎn)
  $url = 'http://entry.mail.163.com/coremail/fcg/ntesdoor2?lightweight=1&verifycookie=1&language=-1&style=-1&username=loki_wuxi';
  $headers = array ('User-Agent' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/2008052906 Firefox/3.0' );

  $ch = curl_init ( $url );
  curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true );
  curl_setopt ( $ch, CURLOPT_HEADER, true );
  curl_setopt ( $ch, CURLOPT_CONNECTTIMEOUT, 120 );
 curl_setopt ( $ch, CURLOPT_POST, true );
  curl_setopt ( $ch, CURLOPT_HTTPHEADER, $headers );
  curl_setopt ( $ch, CURLOPT_COOKIEFILE, COOKIEJAR );
  curl_setopt ( $ch, CURLOPT_COOKIEJAR, COOKIEJAR );
  $result = curl_exec ( $ch );
  curl_close ( $ch );

 //取得sid
  preg_match ( '/sid=[^\"].*/', $result, $location );
  $sid = substr ( $location [0], 4, - 1 );

  //通訊錄地址
  $url = 'http://g4a30.mail.163.com/jy3/address/addrlist.jsp?sid=' . $sid . '&gid=all';
  $headers = array ('User-Agent' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/2008052906 Firefox/3.0' );

  $ch = curl_init ( $url );
  curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true );
  curl_setopt ( $ch, CURLOPT_HEADER, true );
  curl_setopt ( $ch, CURLOPT_CONNECTTIMEOUT, 120 );
  curl_setopt ( $ch, CURLOPT_POST, true );
  curl_setopt ( $ch, CURLOPT_HTTPHEADER, $headers );
  curl_setopt ( $ch, CURLOPT_COOKIEFILE, COOKIEJAR );
  curl_setopt ( $ch, CURLOPT_COOKIEJAR, COOKIEJAR );
  $result = curl_exec ( $ch );
  curl_close ( $ch );
  unlink ( COOKIEJAR );

  //開(kāi)始抓取內(nèi)容
  preg_match_all ( '/<td class="Ibx_Td_addrName"><a[^>]*>(.*?)<\/a><\/td><td class="Ibx_Td_addrEmail"><a[^>]*>(.*?)<\/a><\/td>/i', $result, $infos, PREG_SET_ORDER );
  //1:姓名2:郵箱
  print_r ( $infos );
  ?>


建立一個(gè)PHP文件復(fù)制以上代碼保存后效果立竿見(jiàn)影,記得更改郵箱賬戶(hù)和密碼,賬戶(hù)不需要@后綴。CURL初體驗(yàn),如何,還不錯(cuò)吧。
后來(lái)在CSDN上又看到別人發(fā)帖問(wèn)一個(gè)獲取快遞查詢(xún)的問(wèn)題,他想把一些大的快遞公司查詢(xún)業(yè)務(wù)做在一個(gè)頁(yè)面中,的確是個(gè)很不錯(cuò)的實(shí)用小工具,但是因?yàn)榭爝f查詢(xún)有驗(yàn)證碼,不由的又讓我想起了CURL利器。后來(lái)幫帖主實(shí)現(xiàn)功能,思路很簡(jiǎn)單,先用CURL模擬抓取驗(yàn)證碼,然后顯示到用戶(hù)提交頁(yè)面中,同時(shí)保存驗(yàn)證碼的COOKIE等用戶(hù)查詢(xún)一起提交就保證了COOKIE的同步。

源代碼如下:
-getEms.html

復(fù)制代碼 代碼如下:


<html>
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
  <title>EMS快遞查詢(xún)</title>
  </head>
  <body>
  <?php
  fclose(fopen('cookie.txt','w')); //文件 cookie.txt 用于存放取得的cookie
  $cookiejar = realpath('cookie.txt');
  $fp = fopen("example_homepage.txt", "w"); //文件 example_homepage.txt 用于存放取得的頁(yè)面內(nèi)容
  $ch = curl_init("https://cache.yisu.com/upload/information/20201209/266/43377.jpg"); //查看取到的圖片
  ?>
  <form action="getems.php" method="post" name="form1">
  快遞號(hào):<input name="mailNum" type="text" value="EA739701017CS" />(13位 首尾2位都是字母)
 <input name="code" type="text" value="" />
  <?php echo "<img src='example_homepage.txt'>";?>
  <input type="submit" value="提交">
  </form>

  </body>
  </html>


-getems.php

復(fù)制代碼 代碼如下:


<?php
  if($_POST){
  //使用先前驗(yàn)證碼的cookie文件
  $cookiejar = realpath('cookie.txt');
  //獲取myEmsbarCode號(hào) 和驗(yàn)證碼變量名
  $ch = curl_init("http://www.ems.com.cn");
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_HEADER, 0);
  curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiejar);
  curl_setopt($ch, CURLOPT_COOKIEJAR, $cookiejar);
  $result = curl_exec($ch);
  curl_close($ch);
  preg_match("/<input type=\"hidden\" name=\"myEmsbarCode\" value=\"(.*)\"\/>/isU",$result,$myEmsbarCode);
  preg_match("/<\/span><input name=\"(.*)\" type=\"text\"/isU",$result,$codename);

  $parm = array($codename[1]=>$_POST['code'],
  mailNum =>$_POST['mailNum'],
  myEmsbarCode=>$myEmsbarCode[1],
  reqCode=>'browseBASE'
  );

  $ch = curl_init("http://www.ems.com.cn/qcgzOutQueryAction.do");
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_HEADER, 0);
  curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiejar);
  curl_setopt($ch, CURLOPT_COOKIEJAR, $cookiejar);
  curl_setopt($ch, CURLOPT_POST, 1);
  curl_setopt($ch, CURLOPT_REFERER, "http://www.ems.com.cn");
  curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($parm));
  $_source = curl_exec($ch);
  curl_close($ch);

  //搞定
  var_dump($_source);
  exit;
  }
  ?>


對(duì)于CURL庫(kù)的參數(shù)詳解,網(wǎng)上有很多我直接收錄了
函數(shù)列表CURL庫(kù)一共有17個(gè)函數(shù):
curl_close:關(guān)閉CURL會(huì)話(huà)
curl_copy_handle:復(fù)制一個(gè)CURL會(huì)話(huà)句柄,同時(shí)3復(fù)制其所有參數(shù)
curl_errno:返回最后一個(gè)錯(cuò)誤碼
curl_error:返回一個(gè)字符串,用以描述當(dāng)前會(huì)話(huà)的最后一個(gè)錯(cuò)誤
curl_exec:執(zhí)行當(dāng)前會(huì)話(huà)
curl_getinfo:獲取特定信息
curl_init:初始化CURL會(huì)話(huà)
curl_multi_add_handle:在一個(gè)多連接會(huì)話(huà)中添加一個(gè)句柄
curl_multi_close:關(guān)閉一個(gè)多句柄CRUL會(huì)話(huà)
curl_multi_exec:執(zhí)行一個(gè)多句柄CURL會(huì)話(huà)
curl_multi_getcontent:返回一個(gè)句柄執(zhí)行后的內(nèi)容,如果設(shè)置了CURLOPT_RETURNTRANSFER
curl_multi_info_read:獲取當(dāng)前所有連接的信息
curl_multi_init:初始化一個(gè)多句柄會(huì)話(huà)
curl_multi_remove_handle:從一個(gè)多句柄會(huì)話(huà)中刪除一個(gè)句柄
curl_multi_select:獲取所有綁定的套接字
curl_setopt:設(shè)置CURL傳輸選項(xiàng)
curl_version:獲取CURL版本
常用設(shè)置選項(xiàng)布爾值選項(xiàng)
CURLOPT_AUTOREFERER:當(dāng)返回的信息頭含有轉(zhuǎn)向信息時(shí),自動(dòng)設(shè)置前向連接
CURLOPT_BINARYTRANSFER:TRUEtoreturntherawoutputwhenCURLOPT_RETURNTRANSFERisused.
CURLOPT_COOKIESESSION:標(biāo)志為新的cookie會(huì)話(huà),忽略之前設(shè)置的cookie會(huì)話(huà)
CURLOPT_CRLF:將Unix系統(tǒng)的換行符轉(zhuǎn)換為Dos換行符
CURLOPT_DNS_USE_GLOBAL_CACHE:使用全局的DNS緩存
CURLOPT_FAILONERROR:忽略返回錯(cuò)誤
CURLOPT_FILETIME:獲取請(qǐng)求文檔的修改日期,該日期可以用curl_getinfo()獲取。
CURLOPT_FOLLOWLOCATION:緊隨服務(wù)器返回的所有重定向信息
CURLOPT_FORBID_REUSE:當(dāng)進(jìn)程處理完畢后強(qiáng)制關(guān)閉會(huì)話(huà),不再緩存供重用
CURLOPT_FRESH_CONNECT:強(qiáng)制建立一個(gè)新的會(huì)話(huà),而不是重用緩存的會(huì)話(huà)
CURLOPT_HEADER:在返回的輸出中包含響應(yīng)頭信息
CURLOPT_HTTPGET:設(shè)置HTTP請(qǐng)求方式為GET
CURLOPT_HTTPPROXYTUNNEL:經(jīng)由一個(gè)HTTP代理建立連接
CURLOPT_NOBODY:返回的輸出中不包含文檔信息.
CURLOPT_NOPROGRESS:禁止進(jìn)程級(jí)別傳輸,PHP自動(dòng)設(shè)為真
CURLOPT_NOSIGNAL:忽略所有發(fā)往PHP的信息
CURLOPT_POST:設(shè)置POST方式提交數(shù)據(jù),POST格式為application/x-www-form-urlencoded
CURLOPT_PUTTRUE:設(shè)置PUT方式上傳文件,同時(shí)設(shè)置CURLOPT_INFILE和CURLOPT_INFILESIZE
CURLOPT_RETURNTRANSFER:返回字符串,而不是調(diào)用curl_exec()后直接輸出
CURLOPT_SSL_VERIFYPEER:SSL驗(yàn)證開(kāi)啟
CURLOPT_UNRESTRICTED_AUTH:一直鏈接后面附加用戶(hù)名和密碼,同時(shí)設(shè)置CURLOPT_FOLLOWLOCATION
CURLOPT_UPLOAD:準(zhǔn)備上傳整數(shù)值選項(xiàng)
CURLOPT_BUFFERSIZE:緩存大小
CURLOPT_CONNECTTIMEOUT:連接時(shí)間設(shè)置,默認(rèn)0為無(wú)限制
CURLOPT_DNS_CACHE_TIMEOUT:內(nèi)存中保存DNS信息的時(shí)間,默認(rèn)2分鐘
CURLOPT_INFILESIZE:上傳至遠(yuǎn)程站點(diǎn)的文件尺寸
CURLOPT_LOW_SPEED_LIMIT:傳輸最低速度限制andabort.
CURLOPT_LOW_SPEED_TIME:傳輸時(shí)間限制
CURLOPT_MAXCONNECTS:最大持久連接數(shù)
CURLOPT_MAXREDIRS:最大轉(zhuǎn)向數(shù)
CURLOPT_PORT:連接端口
CURLOPT_PROXYAUTH:*****驗(yàn)證方式
CURLOPT_PROXYPORT:*****端口
CURLOPT_PROXYTYPE:*****類(lèi)型
CURLOPT_TIMEOUT:CURL函數(shù)的最大執(zhí)行時(shí)間字符串選項(xiàng)
CURLOPT_COOKIE:HTTP頭中set-cookie中的cookie信息
CURLOPT_COOKIEFILE:包含cookie信息的文件,cookie文件的格式可以是Netscape格式,或者只是HTTP頭的格式
CURLOPT_COOKIEJAR:連接結(jié)束后保存cookie信息的文件
CURLOPT_CUSTOMREQUEST:自定義請(qǐng)求頭,使用相對(duì)地址
CURLOPT_ENCODING:HTTP請(qǐng)求頭中Accept-Encoding的值
CURLOPT_POSTFIELDS:POST格式提交的數(shù)據(jù)內(nèi)容
CURLOPT_PROXY:代理通道
CURLOPT_PROXYUSERPWD:代理認(rèn)證用戶(hù)名和密碼
CURLOPT_RANGE:返回?cái)?shù)據(jù)的范圍,以字節(jié)記
CURLOPT_REFERER:前向鏈接
CURLOPT_URL:要連接的URL地址,可以在curl_init()中設(shè)置
CURLOPT_USERAGENT:HTTP頭中User-Agent的值
CURLOPT_USERPWD:連接種使用的驗(yàn)證信息數(shù)組選項(xiàng)
CURLOPT_HTTP200ALIASES:200響應(yīng)碼數(shù)組,數(shù)組中的響應(yīng)嗎被認(rèn)為是正確的響應(yīng)
CURLOPT_HTTPHEADER:自定義請(qǐng)求頭信息只能是流句柄的選項(xiàng):
CURLOPT_FILE:傳輸要寫(xiě)入的晚間句柄,默認(rèn)是標(biāo)準(zhǔn)輸出
CURLOPT_INFILE:傳輸要讀取的文件句柄
CURLOPT_STDERR:作為標(biāo)準(zhǔn)錯(cuò)誤輸出的一個(gè)替換選項(xiàng)
CURLOPT_WRITEHEADER:傳輸頭信息要寫(xiě)入的文件回調(diào)函數(shù)選項(xiàng)
CURLOPT_HEADERFUNCTION:擁有兩個(gè)參數(shù)的回調(diào)函數(shù),第一個(gè)是參數(shù)是會(huì)話(huà)句柄,第二是HTTP響應(yīng)頭信息的字符串。使用此回調(diào)函數(shù),將自行處理響應(yīng)頭信息。響應(yīng)頭信息按行返回。設(shè)置返回值為字符串長(zhǎng)度。
CURLOPT_READFUNCTION:擁有兩個(gè)參數(shù)的回調(diào)函數(shù),第一個(gè)是參數(shù)是會(huì)話(huà)句柄,第二是HTTP響應(yīng)頭信息的字符串。使用此函數(shù),將自行處理返回的數(shù)據(jù)。返回值為數(shù)據(jù)尺寸。
CURLOPT_WRITEFUNCTION:擁有兩個(gè)參數(shù)的回調(diào)函數(shù),第一個(gè)是參數(shù)是會(huì)話(huà)句柄,第二是HTTP響應(yīng)頭信息的字符串。使用此回調(diào)函數(shù),將自行處理響應(yīng)頭信息。響應(yīng)頭信息是整個(gè)字符串。設(shè)置返回值為字符串長(zhǎng)度。
其他一些CURL的例子 (摘自網(wǎng)絡(luò))

復(fù)制代碼 代碼如下:


  /*
  *判斷一個(gè)url是否為有效鏈接
  */
  function isRealUrl($url){
  $ch = curl_init();
  $options = array(
  CURLOPT_URL => $url,
  CURLOPT_HEADER => true,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_NOBODY => true
  );
  curl_setopt_array($ch, $options);
  curl_exec($ch);
  if(!curl_errno($ch)){
  return 200==curl_getinfo($ch,CURLINFO_HTTP_CODE)?true:false;
  }
  curl_close($ch);
  }

  $url = 'https://cache.yisu.com/upload/information/20201209/266/43378.jpg';
  if(isRealUrl($url)){echo 'yes';}else{echo 'no';}

  /異步請(qǐng)求的例子:
  $userid = 517932781;
  $imageid = 1520;
  $albumid = 2637;
  $tags = 'aa';
  extract($_POST);
  $url = 'http://'.$_SERVER['HTTP_HOST'].'/ajax/image.php';
  $fields = array(
  'userid' => $userid,
  'imageid' => $imageid,
  'albumid' => $albumid,
  'tags' => $tags,
  'optype' => 'del'
  );
  $ch = curl_init() ;
  curl_setopt($ch, CURLOPT_URL,$url) ;
  curl_setopt($ch, CURLOPT_POST,true) ;
  curl_setopt($ch, CURLOPT_POSTFIELDS,$fields) ;
  $result = curl_exec($ch) ;
  curl_close($ch) ;

  //上傳文件
  $ch = curl_init();
  curl_setopt($ch,CURLOPT_URL,'https://cache.yisu.com/upload/information/20201209/266/43379.jpg')
  );
  curl_setopt($ch, CURLOPT_POST, true) ;
  curl_setopt($ch, CURLOPT_POSTFIELDS, $fields) ;
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
  $result = curl_exec($ch);
  curl_close($ch);

  //多文件上傳
  $ch = curl_init();
  curl_setopt($ch,CURLOPT_URL,'https://cache.yisu.com/upload/information/20201209/266/43380.jpg'),
  'upfile['.$j++.']' => '@'.realpath('/data/lianhuanhua/deal/2.jpg')
  );
  curl_setopt($ch, CURLOPT_POST, true) ;
  curl_setopt($ch, CURLOPT_POSTFIELDS, $fields) ;
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
  $result = curl_exec($ch);
  curl_close($ch);

以上就是怎么在PHP中利用CURL獲取郵箱的地址,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI