처음으로 PHP를 이용해 모의 로그인을 구현하는데 시간이 많이 걸렸는데, 차근차근 살펴보며 천천히 결과를 얻었다는 점이 참 재미있습니다. 아직도 이해가 되지 않는 점은 인증번호 정보를 제출하지 않고도 로그인이 가능한 점입니다. 버그인 것 같습니다.
시뮬레이션 로그인을 실행하려면 먼저 브라우저를 열고 로그인을 시뮬레이션하려는 웹사이트에 로그인해야 합니다. 그런 다음 F12 키를 눌러 시뮬레이션 로그인을 위해 제출할 데이터를 찾습니다. Zhengfang과 마찬가지로 숨겨진 변수가 있습니다. __VIEWSTATE의 변수는 이 변수의 값을 찾으려면 정규식 일치를 사용해야 합니다. 로그인 후 페이지에서 개인 정보를 찾고 쿠키를 코드에 저장하면 됩니다. 쿼리하고 싶은 다른 페이지로 이동하세요. 내 코드는 점수를 쿼리하는 방법입니다. 관심이 있으시면 저와 소통하고 함께 논의할 수 있습니다!
<span style="font-size:14px;"><?php $url = "http://jw.jxust.edu.cn"; $username = ''; //设置自己的账号 $password = ''; // 设置自己的密码 $ch1 = curl_init(); curl_setopt($ch1, CURLOPT_URL, $url); curl_setopt($ch1, CURLOPT_RETURNTRANSFER, 1); $data = curl_exec($ch1); curl_close($ch1); $pattern = '/<input type="hidden" name="__VIEWSTATE" value="(.*)"/'; //正则表达式匹配__VIEWSTATE preg_match_all($pattern, $data, $matches); $result = $matches[1][0]; //print_r($result); $post1 = array( //必要的提交信息 '__VIEWSTATE' => $result, 'txtUserName' => $username, 'TextBox2' => $password, 'RadioButtonList1' => iconv('utf-8', 'gb2312', '学生'), 'Button1' => '' ); $filecookie = dirname(__FILE__)."/cookie"; $ch2 = curl_init(); curl_setopt($ch2, CURLOPT_URL, $url); curl_setopt($ch2, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch2, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch2, CURLOPT_POST, 1); curl_setopt($ch2, CURLOPT_POSTFIELDS, http_build_query($post1)); curl_setopt($ch2, CURLOPT_COOKIEJAR, $filecookie); //保存登陆的cookie信息到filecookie文件中 curl_exec($ch2); curl_close($ch2); //模拟登录成绩页面获取__VIEWSTATE $ch3 = curl_init(); curl_setopt($ch3, CURLOPT_URL, "http://jw.jxust.edu.cn/xscj_gc.aspx?xh=$username&gnmkdm=N121605"); curl_setopt($ch3, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch3, CURLOPT_COOKIEFILE, $filecookie); curl_setopt($ch3, CURLOPT_REFERER, "http://jw.jxust.edu.cn"); $data = curl_exec($ch3); curl_close($ch3); $pattern = '/<input type="hidden" name="__VIEWSTATE" value="(.*)"/'; /* 又要获取__VIEWSTATE, 注意每个模块的的__VIEWSTATE都不一样 */ preg_match_all($pattern, $data, $matches); $cj__VIEWSTATE = $matches[1][0]; //模拟登陆获取成绩信息 $ch4 = curl_init(); curl_setopt($ch4, CURLOPT_URL, "http://jw.jxust.edu.cn/xscj_gc.aspx?xh=$username&gnmkdm=N121605"); $post2 = array( //提交要查找的信息的数据 '__VIEWSTATE' => $cj__VIEWSTATE, 'ddlXN' => '', 'ddlXQ' => '', 'Button1' => iconv('utf-8', 'gb2312', '按学期查询') ); curl_setopt($ch4, CURLOPT_RETURNTRANSFER, 0); curl_setopt($ch4, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch4, CURLOPT_COOKIEFILE, $filecookie); curl_setopt($ch4, CURLOPT_POST, 1); curl_setopt($ch4, CURLOPT_POSTFIELDS, $post2); curl_setopt($ch4, CURLOPT_REFERER, "http://jw.jxust.edu.cn"); $data = curl_exec($ch4); //preg_match_all($pattern, $data, $matches); curl_close($ch4); ?></span>
위 내용은 다양한 측면을 포함하여 Zhengfang 학술 시스템의 시뮬레이션 로그인을 구현하기 위한 PHP 사용을 소개합니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.