引言:PHP能夠經過libcurl實現模擬登陸,提交數據,違法亂紀,燒殺搶虐等等事項。php
簡單說明一下"libcurl",補一下腦:html
使用curl能夠實現Get和Post請求的方法,僞造來路IP等等功能。。。算法
切入主題瀏覽器
這一講,咱們爲你們準備瞭如何利用libcurl進行"模擬登陸用戶並採集數據"。cookie
開啓說明app
默認狀況下,PHP的CURL功能是沒有開啓的,因此你要本身去開啓這個功能,須要以下操做:curl
在php.ini中把 ;extension= php_curl.dll 前面的 " ; " 號去掉!!!post
單刀直入網站
直接上代碼,代碼註釋已經很詳細!各位看官請看下面:編碼
步驟1:
建立一個具備惟一文件名的臨時文件,用於cookie信息的存儲。 (若成功,則返回新的臨時文件名。若失敗,則返回 false。)
// 指定Cookie保存文件
$cookie_file = tempnam('./temp', 'cookie');
步驟2:
初始化一個curl對象,並同時指定要請求的網址,請求攜帶數據。
// 請求網址 $url = "http://www.phpyu.com/index.php?action=login";
// 請求網址
$data = "user=××&pw=××";; // 初始化CURL對象 $ch = curl_init($url);
步驟3:
設置curl對象參數。
// 設置返回響應頭信息[無](說明:該設置一般是須要加上的,用於製做下一次請求的肥料。) curl_setopt($ch, CURLOPT_HEADER, 0); // 設置不輸出到瀏覽器(說明:直接返回字符串,不然直接輸出) curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 設置請求爲通用POST(說明:若是想PHP去作一個正規的HTTP POST,設置屬性爲一個非零值。這個POST是普通的 application/x-www-from-urlencoded 類型,多數被HTML表單使用。)
curl_setopt($ch, CURLOPT_POST, 1); // 設置請求攜帶數據 curl_setopt($ch, CURLOPT_POSTFIELDS, $data); // 設置Cookie保存文件(說明:把返回來的cookie信息保存在$cookie_file文件中) curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
// 設置自動解析編碼(說明:若是出現亂碼問題則加上此句)
curl_setopt($ch, CURLOPT_ENCODING, '');
步驟4:
執行請求,並關閉。
// 執行請求 curl_exec($ch); // 關閉鏈接 curl_close($ch);
上面已經完成了模擬登陸的過程。
偷龍轉鳳
在模擬實現登陸以後,下面要作的就是進入實際要操做的頁面(記得你如今已經登陸了,你應該把登陸的憑證cookie保存了起來。)
// 請求網址 $url="http://www.phpyu.com/admin/××"; // 初始化CURL對象 $ch = curl_init($url); // 設置請求頭[無](說明:若是須要把頭包含在輸出中,則設置屬性爲一個非零值。) curl_setopt($ch, CURLOPT_HEADER, 0); // 設置直接輸出到瀏覽器(說明:0:表示直接輸出 1:返回字符串) curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0); // 設置上傳Cookie內容(說明:該內容引用某個文件) curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); // 執行請求 curl_exec($ch); // 關閉鏈接 curl_exec($ch);
綜合示例1則
Mark一下,你們有興趣能夠看看。
<?php // 常量[Cookie保存路徑] define("COOKIE_PATH", './'); // 請求網址 $url = 'http://****.com/login'; // 請求方式 $method_post = true; // 初始化CURL對象 $ch = curl_init(); // 設置網址 $params[CURLOPT_URL] = $url; // 設置返回響應頭信息[有] $params[CURLOPT_HEADER] = true; // 設置不輸出到瀏覽器(說明:直接返回字符串,不然直接輸出) $params[CURLOPT_RETURNTRANSFER] = true; // 設置容許重定向 $params[CURLOPT_FOLLOWLOCATION] = true; // 設置瀏覽器引擎 $params[CURLOPT_USERAGENT] = 'Mozilla/5.0 (Windows NT 5.1; rv:9.0.1) Gecko/20100101 Firefox/9.0.1'; // 設置請求方式 $params[CURLOPT_POST] = true; // 設置請求數據 $vars['username'] = '張三'; $vars['password'] = '123'; $data = ''; foreach ($vars as $key => $value) { $data.= urlencode($key) . '=' . urlencode($value) . '&'; } $params[CURLOPT_POSTFIELDS] = $data; // 設置Cookie // 判斷是否有cookie,有的話直接使用 if (isset($_COOKIE['cookie_jar']) && ($_COOKIE['cookie_jar'] || is_file($_COOKIE['cookie_jar']))) { $params[CURLOPT_COOKIEFILE] = $_COOKIE['cookie_jar']; } else { // 產生一個cookie文件 $cookie_jar = tempnam(COOKIE_PATH, 'cookie'); // 寫入cookie信息 $params[CURLOPT_COOKIEJAR] = $cookie_jar; // 保存cookie路徑 setcookie('cookie_jar', $cookie_jar); } // 設置curl參數集 curl_setopt_array($ch, $params); // 執行請求 $html = curl_exec($ch); // 輸出結果 echo $html; // 關閉鏈接 curl_close($ch); ?>
注: 若是遇到沒法請求https站點的狀況,多是由於沒法驗證證書或者域名,只要加下下列兩句話便可。
// 跳過證書檢查
$params[CURLOPT_SSL_VERIFYPEER] = false;
// 從證書中檢查SSL加密算法是否存在
$params[CURLOPT_SSL_VERIFYHOST] = false;
未完待續……。
本站文章爲 寶寶巴士 SD.Team 原創,轉載務必在明顯處註明:(做者官方網站: 寶寶巴士 )
轉載自【寶寶巴士SuperDo團隊】 原文連接: http://www.cnblogs.com/superdo/p/4790910.html