最近、PHP の模擬ログインを学習しており、学校の体育システムで実践したいと思っていましたが、失敗しました。私のコードのどこが間違っているのか教えてください。
[いくつかの情報]
システムアドレスにログインします: http://210.35.75.247:8080/student/studentFrame.jsp
(ユーザー名: 1101001、パスワード: 1101001、役割: Student)
朝のランニングアドレスを確認してください: http ://210.35.75.247:8080/student/queryCheckInfo.jsp
[コードは次のとおりです]
<?php $cookie_file = tempnam('./temp','cookie');$login_url = 'http://210.35.75.247:8080/student/studentFrame.jsp';$post_fields = 'userName=1101001&passwd=1101001';$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);$url = 'http://210.35.75.247:8080/student/queryCheckInfo.jsp';$ch = curl_init($url);curl_setopt($ch, CURLOPT_HEADER, 0);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);curl_exec($ch);curl_close($ch);?>
あなたのコードには大きな問題はありません。成功しました
<?php$url = 'http://210.35.75.247:8080/student/studentFrame.jsp';$name = '1101001';$pw = '1101001';$params = array( 'userName' => $name, 'passwd' => $pw,);$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_POST, 1);curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));$con = curl_exec($ch);curl_close($ch);echo preg_replace('/<frame src="\//Us', '<frame src="http://210.35.75.247:8080/', $con);
ありがとうございます!しかし、実際にキャプチャしたいのは朝のランニング データなので、シミュレートされたログインを通じてログイン Cookie を保存し、このアドレス (http://210.35.75.247:8080/student/queryCheckInfo.jsp) にアクセスして、朝のランニングの数。ログインエラーが表示される理由がわかりません。もう一度確認してください。トラブル!ありがとう!
あなたのコードには大きな問題はありません。curl_exec() は結果を返しません。結果は空白です。試してみるとログインは成功しました。
まずは を宣言してください。いくつかの名詞...
フレームページstudent/studentFrame.jspは、フォーム送信のアクションアドレスです
学生情報ページstudent/studentInfo.jspは、フレームページのiframeによって自動的に読み込まれるsrcです
<?php$url = 'http://210.35.75.247:8080/student/studentFrame.jsp';$name = '1101001';$pw = '1101001';$params = array( 'userName' => $name, 'passwd' => $pw,);$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_POST, 1);curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));$con = curl_exec($ch);curl_close($ch);echo preg_replace('/<frame src="\//Us', '<frame src="http://210.35.75.247:8080/', $con);
学生情報ページ Student/studentInfo .jsp はフレーム ページの iframe です 自動的に読み込まれる src
朝のランニングの結果 Student/queryCheckInfo.jsp
firebug を使用してログイン プロセスを追跡したところ、フレーム ページの iframe によって読み込まれた学生情報にparameters?username= が含まれていることがわかりました。 ..&passwd=....、実際のログインプロセスは学生情報ページにあるはずです。失敗したログインページをエコーなしでファイルに保存して確認してみました。フレームページの HTML は、追加のジャンプ js があることを除いて、成功したログインページの HTML とほぼ同じです。学生情報ページのJSESSIONIDを使ったログインは成功しました。フレームページと比べると違います。お尻の管理システムが大変ですね
<?php$url1 = 'http://210.35.75.247:8080/student/studentInfo.jsp';$url2 = 'http://210.35.75.247:8080/student/queryCheckInfo.jsp';$name = '1101001';$pw = '1101001';$params = array( 'userName' => $name, 'passwd' => $pw,);$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url1 . '?' . http_build_query($params));curl_setopt($ch, CURLOPT_HEADER, 1);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);$con = curl_exec($ch);preg_match('/Set-Cookie: (.*);/Us', $con, $match);$cookie = $match[1];curl_setopt($ch, CURLOPT_URL, $url2);curl_setopt($ch, CURLOPT_HEADER, 0);curl_setopt($ch, CURLOPT_COOKIE, $cookie);$con = curl_exec($ch);curl_close($ch);echo $con;
いくつかポイントがもらえるようです
また、こちらでタイアップも行われるようです