㈠ php curl 模擬登錄並獲取數據實例詳解
PHP的curl()在抓取網頁的效率方面是比較高的,而且支持多線程,而file_get_contents()效率就要稍低些,當然,使用curl時需要開啟下curl擴展。
代碼實戰
先來看登錄部分的代碼:
//模擬登錄
function
login_post($url,
$cookie,
$post)
{
$curl
=
curl_init();//初始化curl模塊
curl_setopt($curl,
CURLOPT_URL,
$url);//登錄提交的地址
curl_setopt($curl,
CURLOPT_HEADER,
0);//是否顯示頭信息
curl_setopt($curl,
CURLOPT_RETURNTRANSFER,
0);//是否自動顯示返回的信息
curl_setopt($curl,
CURLOPT_COOKIEJAR,
$cookie);
//設置Cookie信息保存在指定的文件中
curl_setopt($curl,
CURLOPT_POST,
1);//post方式提交
curl_setopt($curl,
CURLOPT_POSTFIELDS,
http_build_query($post));//要提交的信息
curl_exec($curl);//執行cURL
curl_close($curl);//關閉cURL資源,並且釋放系統資源
}
函數login_post()首先初始化curl_init(),然後使用curl_setopt()設置相關選項信息,包括要提交的url地址,保存的cookie文件,post的數據(用戶名和密碼等信息),是否返回信息等等,然後curl_exec執行curl,最後curl_close()釋放資源。注意PHP自帶的http_build_query()可以將數組轉換成相連接的字元串。
接下來如果登錄成功後,我們要獲取登錄成功後的頁面信息。
//登錄成功後獲取數據
function
get_content($url,
$cookie)
{
$ch
=
curl_init();
curl_setopt($ch,
CURLOPT_URL,
$url);
curl_setopt($ch,
CURLOPT_HEADER,
0);
curl_setopt($ch,
CURLOPT_RETURNTRANSFER,
1);
curl_setopt($ch,
CURLOPT_COOKIEFILE,
$cookie);
//讀取cookie
$rs
=
curl_exec($ch);
//執行cURL抓取頁面內容
curl_close($ch);
return
$rs;
}
函數get_content()中也是先初始化curl,然後設置相關選項,執行curl,釋放資源。其中我們設置CURLOPT_RETURNTRANSFER為1即自動返回信息,而CURLOPT_COOKIEFILE可以讀取到登錄時保存的cookie信息,最後將頁面內容返回。
我們的最終目的是要獲取到模擬登錄後的信息,也就是只有正常登錄成功後才能獲取的有用信息。接下來我們以登錄開源中國的移動版為例,看看如何抓取到登錄成功後的信息。
//設置post的數據
$post
=
array
(
'email'
=>
'oschina賬戶',
'pwd'
=>
'oschina密碼',
'goto_page'
=>
'/my',
'error_page'
=>
'/login',
'save_login'
=>
'1',
'submit'
=>
'現在登錄'
);
//登錄地址
$url
=
"http://m.oschina.net/action/user/login";
//設置cookie保存路徑
$cookie
=
dirname(__FILE__)
.
'/cookie_oschina.txt';
//登錄後要獲取信息的地址
$url2
=
"http://m.oschina.net/my";
//模擬登錄
login_post($url,
$cookie,
$post);
//獲取登錄頁的信息
$content
=
get_content($url2,
$cookie);
//刪除cookie文件
@
unlink($cookie);
//匹配頁面信息
$preg
=
"/<td
class='portrait'>(.*)<\/td>/i";
preg_match_all($preg,
$content,
$arr);
$str
=
$arr[1][0];
//輸出內容
echo
$str;
使用總結
1、初始化curl;
2、使用curl_setopt設置目標url,和其他選項;
3、curl_exec,執行curl;
4、執行後,關閉curl;
5、輸出數據。
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
㈡ 怎樣用php中的curl模擬登陸
在我的博客《PHPcURL模擬登錄與採集分析過程詳解》做了詳細的介紹,步驟有:
1.訪問目標網站
2.打開Firebug(快捷鍵:F12)
3.清除【Cookie】
4.重新訪問目標網站
5.設置【網路】為[保持]狀態
6.填寫表單,提交登錄請求
7.利用【網路】,分析提交信息
8.復制請求的cURL命令
9.分析命令傳輸的參數與Cookie和前面頁面響應內容的關聯性
10.如果遇到Cookie和響應內容都無法查找到的參數,Ctrl+S保存當前頁面為全部,利用文本搜索該參數的位置
11.利用cURL命令組裝模擬登錄程序
詳情請參考博客內容:http://www.zjmainstay.cn/php-curl-step
㈢ php模擬登陸知乎
這種模擬登陸其實很簡單,php的話主要用curl來實現。仔細研究一下你要抓的站具體是怎麼實現用戶登錄的,可以用wireshark或者burpsuite(建議用後者)抓包看看整個過程都有那幾次請求,每次請求都發送了哪些數據,構造好發給他就可以實現登錄了。
之後獲取個人信息就很容易了,找找php解析html庫,或者最簡單粗暴的就是字元串截取函數加正則表達式,把你想要的數據提取出來就好了。
對於你給出的這種驗證碼屬於非常容易識別的驗證碼了,基本的識別原理參看使用Canvas進行驗證碼識別。
當然比較蛋疼的問題就是網頁編碼問題,經常爬過來全是亂碼,網上找找看轉碼的方法,都試一下,這是一門玄學,能不能成功看你人品和耐心吧。
㈣ php模擬登陸,跳轉頁面問題
把你的登錄信息保存在一個session中,如
login.php
<?php
//表單提交後...
$posts=$_POST;
//清除一些空白符號
foreach($postsas$key=>$value){
$posts[$key]=trim($value);
}
$password=md5($posts["password"]);
$username=$posts["username"];
$query="SELECT`username`FROM`user`WHERE`password`='$password'AND`username`='$username'";
//取得查詢結果
$userInfo=$DB->getRow($query);
if(!empty($userInfo)){
//當驗證通過後,啟動Session
session_start();
//注冊登陸成功的admin變數,並賦值true
$_SESSION["admin"]=true;
}else{
die("用戶名密碼錯誤");
}
?>
我們在需要用戶驗證的頁面啟動 Session,判斷是否登陸:
<?php
// 防止全局變數造成安全隱患
$admin = false;
// 啟動會話,這步必不可少
session_start();
// 判斷是否登陸
if (isset($_SESSION["admin"]) && $_SESSION["admin"] === true) {
echo "您已經成功登陸";
} else {
// 驗證失敗,將 $_SESSION["admin"] 置為 false
$_SESSION["admin"] = false;
die("您無權訪問");
}
?>
㈤ 在PHP中如何偽造http頭進行模擬登陸
用php模擬登陸主要分為三部分 1. post數據。 2.根據返回的http頭,從中截出cookie段。 3.偽造http頭發送請求。 我這里以用php抓取163相冊的需要密碼才能訪問的目錄為例。 <?php function posttohost($url, $data) //post數據 { $url = parse_url($url); if (!$url) return "couldn't parse url"; if (!isset($url['port'])) { $url['port'] = ""; } if (!isset($url['query'])) { $url['query'] = ""; } $encoded = ""; foreach ($data as $k=>$v) { $encoded .= ($encoded ? "&" : ""); $encoded .= rawurlencode($k)."=".rawurlencode($v); } $fp = fsockopen($url['host'], $url['port'] ? $url['port'] : 80); if (!$fp) return "Failed to open socket to $url[host]"; fputs($fp, sprintf("POST %s%s%s HTTP/1.0\n", $url['path'], $url['query'] ? "?" : "", $url['query'])); fputs($fp, "Host: $url[host]\n"); fputs($fp, "Content-type: application/x-www-form-urlencoded\n"); fputs($fp, "Content-length: " . strlen($encoded) . "\n"); fputs($fp, "Connection: close\n\n"); fputs($fp, "$encoded\n"); $line = fgets($fp,1024); if (!eregi("^HTTP/1\.. 200", $line)) return; $results = ""; $inheader = 1; while(!feof($fp)) { $line = fgets($fp,1024); if ($inheader && ($line == "\n" || $line == "\r\n")) { $inheader = 0; } elseif ($inheader) { $results .= $line; } } fclose($fp); return $results; }
㈥ php 模擬登錄,post到多個地址怎麼做
$url = ''; //POST地址
$password = ''; //密碼
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_POSTFIELDS, 'username='.$_COOKIE['username'].'&password='.$password);
/**
* 如果$url是https則需要取消下面兩行注釋
* curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
* curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
*/
curl_exec($curl);
curl_close($curl);
㈦ PHP CURL 實現 模擬登陸 為何目標網站沒有登陸的反應呢 高手請進
1、表單登陸地址不對
2、表單名不對,名字是username 和 password 沒有ls
<?php
$curl=curl_init();
$cookie_jar=tempnam('./tmp','cookie');
curl_setopt($curl,CURLOPT_URL,'http://bbs.miaozhan360.com/member.php?mod=logging&action=login&loginsubmit=yes&infloat=yes&lssubmit=yes');//這里寫上處理登錄的界面
curl_setopt($curl,CURLOPT_POST,1);
$request='username=wonderwiller&password=wonderwiller';
curl_setopt($curl,CURLOPT_POSTFIELDS,$request);//傳遞數據
curl_setopt($curl,CURLOPT_COOKIEJAR,$cookie_jar);//把返回來的cookie信息保存在$cookie_jar文件中
curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);//設定返回的數據是否自動顯示
curl_setopt($curl,CURLOPT_HEADER,false);//設定是否顯示頭信息
curl_setopt($curl,CURLOPT_NOBODY,false);//設定是否輸出頁面內容
$r=curl_exec($curl);//返回結果
echo$r;
curl_close($curl);//關閉
$curl2=curl_init();
curl_setopt($curl2,CURLOPT_URL,'http://bbs.miaozhan360.com/forum.php');//登陸後要從哪個頁面獲取信息
curl_setopt($curl2,CURLOPT_HEADER,false);
curl_setopt($curl2,CURLOPT_RETURNTRANSFER,1);
curl_setopt($curl2,CURLOPT_COOKIEFILE,$cookie_jar);
$content=curl_exec($curl2);
echo$content;
?>
㈧ 如何通過php程序模擬用戶登錄
模擬用戶可以用php的curl的post,例如
$url = "http://www.uzuzuz.com";
$post_data = array ("username" => "uzuzuz","password" => "12345");
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// post數據
curl_setopt($ch, CURLOPT_POST, 1);
// post的變數
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
$output = curl_exec($ch);
curl_close($ch);
//列印獲得的數據
print_r($output);
具體參考:http://www.uzuzuz.com/article/4.html
㈨ php模擬windows域用戶登錄網站並獲取數據
一般網站都是通過cookie來判斷登錄狀態的,你可以第一次手動登錄,然後把cookie保存下來。然後在用curl帶上這個cookie去請求網站,就會認為你是登錄的了,同時你要把新返回的cookie保存下來,這都是curl裡面設置的事情,一個CURLOPT_COOKIEFILE 一個 CURLOPT_COOKIEJAR 可以說百分之九十的網站都可以這樣處理
㈩ 如何用PHP模擬登錄,並保存Session值。急急急。。。。。
這個是要連接資料庫的。。。
生成頁面:
開啟session(每個php頁面都寫這句):session_start();
生成session:$_session['test']=100;//把100存入session,並命名test;
接受頁面:
開啟session:session_start();
接受session:$test=$_session['test'];
輸出session:echo $test;
。。。。。。
後面不知道怎麼寫了