Kini terdapat halaman log masuk sistem dalaman: https://xxxx.xxxx.com/login.jsp
,
账号密码分别为aaa,bbb,
登录后跳转地址http://xxxx.xxxx.com/system/toIndex.action
, dengan maklumat berikut:
Alamat penyerahan borang log masuk ialah: http://xxxx.xxxx.com/system/login.action
Selepas log masuk dengan penyemak imbas dan mengakses http://xxxx.xxxx.com/org/findAjaxOrgTreeStringByParamsId.action?orgTypeCodeId=30000000,30000003&url=/purOrder/queryOrder.action
, anda boleh mendapatkan data json, dengan maklumat berikut:
Sekarang saya menggunakan curl.php untuk mensimulasikan log masuk Nampaknya saya boleh log masuk, tetapi saya tidak dapat mendapatkan datanya:
{success:true,msg:false,loginone:true,SESSIONID:'E00EE77C97DD4E5BF860A9DB00DA5520',ralat:'Ini kali pertama anda log masuk ke sistem, sila tukar kata laluan anda! '}rentetan(16)
"{sessionState:0}"
Adakah terdapat cara untuk menangkap data? Kod
curl.php adalah seperti berikut:
<?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;
}
?>
Apakah pulangan selepas log masuk? SetCookie? Mengapa melompat keIndex.action?
HalamankeIndex.action mengembalikan dua kuki Adakah ia berkaitan dengan log masuk? Ini mesti dianalisis dengan jelas dan tidak diambil mudah.
Kod anda hanya mensimulasikan permintaan log masuk.tindakan dan tidak sepadan sepenuhnya dengan gelagat penyemak imbas Bagaimana anda boleh mengharapkan pelayan memberikan anda hasil yang sama?
Log masuk anda telah dilaksanakan, simpan kuki, dan kemudian gunakan kuki ini untuk meminta data daripada halaman lain (sama seperti tingkah laku penyemak imbas)
Letakkan UserAgent dalam fungsi get_content untuk mensimulasikan akses pelayar biasa