當前位置:首頁 » 編程語言 » phpcurl登陸

phpcurl登陸

發布時間: 2022-12-30 07:55:54

php如何做第三方登錄 curl

方法一:面向過程,回調地址和首次觸發登錄寫到了一個方法頁面【因為有了if做判斷】,
方法二,三:面向對象
1.先調用登錄方法,向騰訊發送請求,
2.騰訊攜帶本網站唯一對應參數OPENID,ACCESSTOKEN,返回到對應回調頁面,
3.回調頁面接受到騰訊的參數後,通過這個兩個參數,再發出對應的請求,如查詢用戶的數據。

即使你沒看懂,也沒關系,按照我下面的流程來,保證你可以實現。

Ⅱ 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 實現 模擬登陸 為何目標網站沒有登陸的反應呢 高手請進

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,用curl寫個post登陸並取回cookies的代碼

要在文件中保存COOKIE的信息,你的curl_setopt($ch, CURLOPT_COOKIEJAR,$cookie_file);中的$cookie_file必須是要保存cookie信息的文件名,最最關鍵的一點,這個文件名是必須要帶絕對路徑,否則是不行的,如果文件帶上絕對路徑的話,會在文件中以Netscape格式保存所有的cookie信息。
還有一個需要說明的,COOKIE必須指定有效期,如果沒有指定有效期的話,默認的瀏覽器關閉COOKIE就失效。這種COOKIE信息在內存中存放,不會寫入硬碟的。
這兩個方面你都需要考慮。用絕對路徑,保存一個長效的COOKIE,肯定可以成功!

Ⅳ php中,用curl登陸網頁的一點問題

Lz..你是不是路徑的問題呢。
$cookie_jar = dirname(_FILE_)./cookie.txt;這樣試一下。

Ⅵ 如何判斷php中curl模擬登陸是否成功

/**
* 模擬登錄
*/

//初始化變數
$cookie_file = "tmp.cookie";
$login_url = "";
$verify_code_url = "";

echo "正在獲取COOKIE...\n";
$curlj = curl_init();
$timeout = 5;
curl_setopt($curl, CURLOPT_URL, $login_url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($curl,CURLOPT_COOKIEJAR,$cookie_file); //獲取COOKIE並存儲
$contents = curl_exec($curl);
curl_close($curl);

echo "COOKIE獲取完成,正在取驗證碼...\n";
//取出驗證碼
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $verify_code_url);
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$img = curl_exec($curl);
curl_close($curl);

$fp = fopen("verifyCode.jpg","w");
fwrite($fp,$img);
fclose($fp);
echo "驗證碼取出完成,正在休眠,20秒內請把驗證碼填入code.txt並保存\n";
//停止運行20秒
sleep(20);

echo "休眠完成,開始取驗證碼...\n";
$code = file_get_contents("code.txt");
echo "驗證碼成功取出:$code\n";
echo "正在准備模擬登錄...\n";

$post = "username=maben&pwd=hahahaha&verifycode=$code";
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER,1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file);
$result=curl_exec($curl);
curl_close($curl);

//這一塊根據自己抓包獲取到的網站上的數據來做判斷
if(substr_count($result,"登錄成功")){
echo "登錄成功\n";
}else{
echo "登錄失敗\n";
exit;
}

Ⅶ PHP CURL模擬登陸一個COOKIE控制的網站

<?php

$ch=curl_init('https://login.msu.e/Login');
$options=array(
CURLOPT_SSL_VERIFYPEER=>false,
CURLOPT_SSL_VERIFYPEER=>false,
CURLOPT_REFERER=>'https://login.msu.e/',
CURLOPT_HOST
CURLOPT_RETURNTRANSFER=>true,
CURLOPT_POST=>true,
CURLOPT_POSTFIELDS=>array('NetID'=>'aaa','Password'=>'bbb'),
CURLOPT_USERAGENT=>'Mozilla/5.0(WindowsNT6.3;WOW64;rv:37.0)Gecko/20100101Firefox/37.0'
);
curl_setopt_array($ch,$options);
$response=curl_exec($ch);

var_mp($response);

?>

Ⅷ PHP的curl模擬·登錄老是失敗出現了405錯誤

405 是指請求的 URL 不支持請求的方法, htm(除偽靜態)是靜態頁面,是只能使用 get 方法的,而你要登錄,要用post,而你這里也確實是用的 post,那麼我覺得你應該是 URL 取錯了。像這種 post 的地址都要是有程序處理的,你再回去看看原來頁面中 form 上的 action 地址吧

Ⅸ 我想用PHP curl模擬登陸百度!求指導

cookie是在header中傳輸的,你不開header,cookie如何發送呢?

curl_setopt($ch, CURLOPT_HEADER, 0); //這個改為1

另外,網路有那麼好登錄嗎?你應該把header寫全,包括User-Agent在內的各種報頭。

Ⅹ php curl 無法實現模擬登陸

<?php
$discuz_url = 'http://127.0.0.1/discuz/';//論壇地址
$login_url = $discuz_url .'logging.php?action=login';//登錄頁地址

$post_fields = array();
//以下兩項不需要修改
$post_fields['loginfield'] = 'username';
$post_fields['loginsubmit'] = 'true';
//用戶名和密碼,必須填寫
$post_fields['username'] = 'tianxin';
$post_fields['password'] = '111111';
//安全提問
$post_fields['questionid'] = 0;
$post_fields['answer'] = '';
//@todo驗證碼
$post_fields['seccodeverify'] = '';
//獲取表單FORMHASH
$ch = curl_init($login_url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$contents = curl_exec($ch);
curl_close($ch);
preg_match('/<input\s*type="hidden"\s*name="formhash"\s*value="(.*?)"\s*\/>/i', $contents, $matches);
if(!empty($matches)) {
$formhash = $matches[1];
} else {
die('Not found the forumhash.');
}

//POST數據,獲取COOKIE,cookie文件放在網站的temp目錄下
$cookie_file = tempnam('./temp','cookie');
$ch = curl_init($login_url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
curl_exec($ch);
curl_close($ch);
//取到了關鍵的cookie文件就可以帶著cookie文件去模擬發帖,fid為論壇的欄目ID
$send_url = $discuz_url."post.php?action=newthread&fid=2";

$ch = curl_init($send_url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
$contents = curl_exec($ch);
curl_close($ch);
//這里的hash碼和登陸窗口的hash碼的正則不太一樣,這里的hidden多了一個id屬性
preg_match('/<input\s*type="hidden"\s*name="formhash"\s*id="formhash"\s*value="(.*?)"\s*\/>/i', $contents, $matches);
if(!empty($matches)) {
$formhash = $matches[1];
} else {
die('Not found the forumhash.');
}

$post_data = array();
//帖子標題
$post_data['subject'] = 'test2';
//帖子內容
$post_data['message'] = 'test2';
$post_data['topicsubmit'] = "yes";
$post_data['extra'] = '';
//帖子標簽
$post_data['tags'] = 'test';
//帖子的hash碼,這個非常關鍵!假如缺少這個hash碼,discuz會警告你來路的頁面不正確
$post_data['formhash']=$formhash;

$ch = curl_init($send_url);
curl_setopt($ch, CURLOPT_REFERER, $send_url); //偽裝REFERER
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
$contents = curl_exec($ch);
curl_close($ch);
//清理cookie文件
unlink($cookie_file);
?>

熱點內容
玩客雲伺服器搭建 發布:2025-07-02 10:59:58 瀏覽:356
假笑資料庫 發布:2025-07-02 10:59:09 瀏覽:849
手機怎麼製作腳本 發布:2025-07-02 10:59:05 瀏覽:365
mybatis的動態sql語句 發布:2025-07-02 10:56:51 瀏覽:957
速騰超越版14有哪些配置 發布:2025-07-02 10:49:02 瀏覽:657
安卓手機高刷在哪裡 發布:2025-07-02 10:43:02 瀏覽:342
愛奇藝iphone緩存 發布:2025-07-02 10:38:00 瀏覽:841
南方次元的解壓 發布:2025-07-02 10:31:32 瀏覽:246
葉祖新編程 發布:2025-07-02 10:29:06 瀏覽:400
k4在哪裡下載安卓 發布:2025-07-02 10:15:32 瀏覽:909