[PHP自動化-進階]001.CURL模擬登陸並採集數據

引言:PHP能夠經過libcurl實現模擬登陸,提交數據,違法亂紀,燒殺搶虐等等事項。php

簡單說明一下"libcurl",補一下腦:html

  • libcurl目前支持http、https、ftp、gopher、telnet、dict、file和ldap協議。
  • libcurl同時也支持 HTTPS認證、HTTP POST、HTTP PUT、 FTP 上傳(這個也能經過PHP的FTP擴展完成)、HTTP 基於表單的上傳、代理、cookies和用戶名+密碼的認證。

使用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

相關文章
相關標籤/搜索