登陸採集,是指某些網頁內容需要使用帳號登陸以後,才可以查看,傳統的file_get_contents無法擷取到登陸後才可查看的內容。
curl是PHP中一個強大的組件,可以實現HTTP協議的HEAD,GET,POST方式訪問資料,通過POST即可類比使用者登陸,然後拿到SESSION再擷取具體的頁面。
注意事項:
1、網頁編碼問題,如果對方的網頁編碼與你的不一致,請自行使用iconv或mb_string進行編碼轉換。
2、COOKIE儲存的路徑必須是絕對路徑,一開始測試的時候,在WINDOWS上怎麼也儲存不上COOKIE,請確認你的路徑。
廢話不多說,直接看代碼:
'coldstar','password'=>'123456.');$cookiepath = $_SERVER["DOCUMENT_ROOT"] .'\\' .MD5($UserURL);//以登陸網域名稱的MD5值設定為COOKIE檔案名稱$html = curl_post_contents($UserURL,$UserData,$cookiepath);//類比登陸if($html){if(stripos($html,'登陸成功')){$html = curl_get_contents($testURL,True,$cookiepath);//擷取真正的內容}else{$html = '登陸失敗';}}echo $html;function curl_get_contents($url,$usecookie = 0,$cookiepath = ''){$userAgent = 'Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.1;+SV1)';$referer = $url;$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);//設定訪問的url地址curl_setopt($ch, CURLOPT_TIMEOUT, 10);//設定逾時curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);//使用者訪問代理 User-Agentcurl_setopt($ch, CURLOPT_REFERER, $referer);//設定 refererif($usecookie){curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiepath);//COOKIE的儲存路徑,傳送時使用}curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);//跟蹤301curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//返回結果$r = curl_exec($ch);curl_close($ch);return $r;}function curl_post_contents($url,$data = array(),$cookiepath = ''){$userAgent = 'Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.1;+SV1)';$referer = $url;if(!is_array($data) || !$url) return '';foreach($data as $key=>$value){$post .= urlencode($key).'='.$value.'&';}rtrim($post ,'&');$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);//設定訪問的url地址curl_setopt($ch, CURLOPT_TIMEOUT, 10);//設定逾時curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);//使用者訪問代理 User-Agentcurl_setopt($ch, CURLOPT_REFERER, $referer);//設定 referercurl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);//跟蹤301curl_setopt($ch, CURLOPT_POST, 1);//指定post資料curl_setopt($ch, CURLOPT_POSTFIELDS, $post);//添加變數curl_setopt($ch, CURLOPT_COOKIEJAR, $cookiepath);//COOKIE的儲存路徑,返回時儲存COOKIE的路徑curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//返回結果$r = curl_exec($ch);curl_close($ch);return $r;}?>
原文:http://www.yanghengfei.com/archives/506/