Il existe désormais une page de connexion interne au système : https://xxxx.xxxx.com/login.jsp
,
账号密码分别为aaa,bbb,
登录后跳转地址http://xxxx.xxxx.com/system/toIndex.action
, avec les informations suivantes :
L'adresse d'envoi du formulaire de connexion est : http://xxxx.xxxx.com/system/login.action
Après vous être connecté avec le navigateur et avoir accédé à http://xxxx.xxxx.com/org/findAjaxOrgTreeStringByParamsId.action?orgTypeCodeId=30000000,30000003&url=/purOrder/queryOrder.action
, vous pouvez obtenir les données json, avec les informations suivantes :
Maintenant, j'utilise curl.php pour simuler la connexion. Il semble que je puisse me connecter, mais je ne parviens pas à obtenir les données :
.{success:true,msg:false,loginone:true,SESSIONID:'E00EE77C97DD4E5BF860A9DB00DA5520',erreur:'C'est la première fois que vous vous connectez au système, veuillez changer votre mot de passe ! '}string(16)
"{sessionState:0}"
Existe-t-il un moyen de capturer les données ? Le code de
curl.php est le suivant :
<?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;
}
?>
Quel est le retour après connexion ? DéfinirCookie? Pourquoi passer à toIndex.action ?
La pagetoIndex.action a renvoyé deux cookies. Est-ce lié à la connexion ? Ceux-ci doivent être analysés clairement et ne pas être tenus pour acquis.
Votre code simule uniquement la requête login.action et ne correspond pas complètement au comportement du navigateur. Comment pouvez-vous vous attendre à ce que le serveur vous donne le même résultat ?
Votre connexion a été implémentée, enregistrez le cookie, puis utilisez ce cookie pour demander des données à d'autres pages (tout comme le comportement d'un navigateur)
Mettez UserAgent dans la fonction get_content pour simuler l'accès normal au navigateur