php - curl模擬登入取得資料的問題
高洛峰
高洛峰 2017-05-16 13:16:11
0
3
632

現在有一個內部系統登入頁面:https://xxxx.xxxx.com/login.jsp,
帳號密碼分別為aaa,bbb,
登入後跳到位址http://xxxx.xxxx.com/system/toIndex.action,有以下資訊:

#登入表單提交網址為:http://xxxx.xxxx.com/system/login.action

瀏覽器登入後造訪http://xxxx.xxxx.com/org/findAjaxOrgTreeStringByParamsId.action?orgTypeCodeId=30000000,30000003&url=/purOrder/queryOrder.action

#都可以取得資訊:


#現在我用curl.php來模擬登錄,好像能登陸上去,但是取得不到資料,回傳結果:

###{success:true,msg:false,loginone:true,SESSIONID:'E00EE77C97DD4E5BF860A9DB00DA5520',error:'您是第一次登入系統,請修改密碼! '}string(16)###"{sessionState:0}"###### ######請問有什麼辦法可以抓取到資料呢? ######curl.php程式碼如下:###
<?php
$post = array(
    'userName' => 'aaa',
    'userPwd' => 'bbb',
);


$url = "http://xxxx.xxxx.com/system/login.action"; //登录地址 

$cookie = dirname(__FILE__) . '/cookie.txt'; //设置cookie保存路径 

$url2 = "http://xxxx.xxxx.com/org/findAjaxOrgTreeStringByParamsId.action?orgTypeCodeId=30000000,30000003&url=/purOrder/queryOrder.action"; //登录后要获取信息的地址 

login_post($url, $cookie, $post); //模拟登录 
$content = get_content($url2, $cookie); //获取$url2的信息
var_dump($content);
@ unlink($cookie); //删除cookie文件 

function login_post($url, $cookie, $post) {
    $curl = curl_init(); //初始化curl模块 
    curl_setopt($curl, CURLOPT_URL, $url); //登录提交的地址 
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);//跳过https验证
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);//跳过https验证
    $UserAgent = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; .NET CLR 3.5.21022; .NET CLR 1.0.3705; .NET CLR 1.1.4322)';
    curl_setopt($curl, CURLOPT_USERAGENT, $UserAgent);// 使用用户代理
    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资源,并且释放系统资源 
}

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;
}
?>
高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回覆(3)
Ty80

登陸的返回是什麼? setCookie了嗎? 為什麼跳到toIndex.action?

toIndex.action頁面 回傳了兩個cookie,跟登陸有關嗎?這些都要分析清楚,不要想當然。

你的程式碼只模擬了login.action請求,並沒有跟瀏覽器的行為完全匹配,怎麼能指望伺服器給你一樣的結果呢。

刘奇

你的登入已經實現了,把cookie保存下來,然後用這個cookie去請求其他頁面的資料(就像瀏覽器的行為一樣)

PHPzhong

get_content函數裡把UserAgent帶上,模擬正常的瀏覽器存取

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板