ホームページ  >  記事  >  バックエンド開発  >  phpが学務へのログインをシミュレートすると、ここに移動したオブジェクトが表示され、curl_setopt($ch, CURLOPTFOLLOWLOCATION, 1); が追加されます。

phpが学務へのログインをシミュレートすると、ここに移動したオブジェクトが表示され、curl_setopt($ch, CURLOPTFOLLOWLOCATION, 1); が追加されます。

WBOY
WBOYオリジナル
2016-06-23 13:59:362406ブラウズ

私は学生なので、忙しい中、専門家にアドバイスをいただければと思います。
学務 Web サイトにログインできません。専門家に助けを求めてください

学事 Web サイト http://xk.shnu.edu .cn:82/index.aspx
テストアカウント 120154728 123612
ログインインターフェース

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type"/>  <title>a</title></head><body><div class="header">绑定学号    </div>    <div class="content">        <div class="notice"><br/>初始密码身份证后6位</div>            <div class="form">            	<form action="http://localhost/ff/post.php" method="post">                    <div class="row">                	   <span class="label">学  号</span><br/>                	   <input class="input" type="text" name="stuno" value="" /><br/>                    </div>                    <div class="row">                        <span class="label">密  码</span><br/>                        <input class="input" type="password" name="stupwd" value="" /><br/>                    </div>					<div class="row">                        <span class="label">验证码</span><br/>                        <input class="input" type="text" name="stuyzm" value="" /><br/>                    </div>					<div class="row">						<input class="<strong></strong>" type="submit" value="提交" />					</div>					<iframe id='img' src="i.php" scrolling="No" frameborder="0"></iframe>             </form></body></html>

確認コードを取得してください
<?php$url = "http://xk.shnu.edu.cn:82/ValidateCode.aspx?codeLen=5&aFineness=90&ImgWidth=85&PosX=4&PosY=1&FontFamily=Arial&FontSize=14&FontStyle=3";        $filedir = SITE_PATH."/TMP/Cookies";        $cookie_file =  $filedir."/cookie.txt";        $ch = curl_init();        curl_setopt($ch, CURLOPT_URL, $url);        curl_setopt($ch, CURLOPT_HEADER, 0);        curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");        curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); //        curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);        curl_setopt($ch, CURLOPT_TIMEOUT, "10");        header("Content-type:image/gif");         echo  curl_exec($ch);        curl_close($ch); ?>

投稿ページ
<?php$user=$_POST["stuno"];$password=$_POST["stupwd"];$yzm=$_POST["stuyzm"];//echo $user;//echo $password;//echo $yzm;$cookie_file = tempnam('./temp','cookie');$login_url = 'http://xk.shnu.edu.cn:82/index.aspx';$post_fields = array("cktime"=>"3153600","txtUserID"=>$user,"txtUserPwd"=>$password,"txtValidateCode"=>$yzm);    $ch = curl_init($login_url);    curl_setopt($ch, CURLOPT_HEADER, 0);    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);	curl_setopt($ch, CURLOPTFOLLOWLOCATION, 1);    curl_setopt($ch, CURLOPT_POST, 1);    curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);    curl_exec($ch);    curl_close($ch);        $url='http://xk.shnu.edu.cn:82/index.aspx';    $ch = curl_init($url);    curl_setopt($ch, CURLOPT_HEADER, 0);    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);	curl_setopt($ch, CURLOPTFOLLOWLOCATION, 1);    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);    $contents = curl_exec($ch);    curl_close($ch);?>


ディスカッションに返信 (解決策)

マスター、助けに来てください

CURLOPTFOLLOWLOCATION

CURLOPT_FOLLOWLOCATION

そしてコードの実行順序

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

そして、確認コードをcurlで取得する必要はありません。直接
f2ace4e37b7a3e0d3e8798993e9c4f93

CURLOPTFOLLOWLOCATION

CURLOPT_FOLLOWLOCATION
である必要があります
そして、コードの実行順序
コードの実行順序はどうあるべきですか?コードに他に問題はありますか?
変更されたので、リダイレクト情報はありませんが、ページの表示はまだ間違っています

そして、検証コードをcurlで取得する必要はありません。直接
f2ace4e37b7a3e0d3e8798993e9c4f93 以上です
方法確認コードがウェブサイト上のものと一致するかどうかはわかりますか?今はこんな感じです

curl で http://xk.shnu.edu.cn:82/index.aspx にアクセスして Cookie を取得します
確認コードの画像アドレスを解析します
フォームページにユーザー情報と確認コードの値を入力します
curl 送信

curl は http://xk.shnu.edu.cn:82/index.aspx にアクセスして Cookie を取得します
確認コードの画像アドレスを解析します
フォーム ページ、ユーザー情報と確認コードの値を入力します
curl submit
私のプロセスはこんな感じです。 シミュレーション後のページは、アドレスバーに直接URLを入力して生成されたページと同じです

プロセスの最初の1回目のみです。 $ch, CURLOPT_COOKIEJAR, $cookie_file)
後続のすべてに存在することはできません。そうしないと、Cookie の読み取りが変更されます

プロセスの最初にのみ、curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file) が存在します。後続のすべてに存在することはできません。そうでない場合、Cookie の読み取りは変更されますか? 私はこれを初めて使用するため、まだ理解できません。これは、curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file); がもう必要ないことを意味しますか?投稿ページ?


そして、検証コードをcurlで取得する必要はありません。直接
f2ace4e37b7a3e0d3e8798993e9c4f93 以上です
検証コードを取得するにはcurlを使用する必要があるかどうか知っていますか?

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
ユーザー名とパスワードの確認コードのデータはまだ送信されていませんか?

私#7がそれを明確にしていませんでしたか?


私#7がそれを明確にしていませんでしたか?

私のプロセスはあなたが言った通りになるはずです

彼のログインフォームには 2 つの隠しフィールドがあります。それも渡していただけますか


彼のログインフォームには 2 つの隠しフィールドがあります。それも渡してください。ここですか

モデレータ I隠し値を追加しましたが、まだ機能しません

すごいです

pos ページにアクセスしています
$cookie_file = tempnam('./temp','cookie');
確認コードを取得中です

$ cookie_file = $filedir."/cookie.txt";


プロセス全体で異なる Cookie ファイルが使用されます。明らかに、Cookie が一貫しているという保証はありません

你在 pos 页面中
$cookie_file = tempnam('./temp','cookie');
你在获取验证码程序中
$cookie_file =  $filedir."/cookie.txt";

整个过程中使用了不同的 cookie 文件,显然不能保证 cookie 是一致的 我用firebug调试 发现隐藏值没有传进去,为什么啊?
其他的值都有,传输方式跟其他的一样

$user=$_POST["stuno"];$password=$_POST["stupwd"];$yzm=$_POST["stuyzm"];//echo $user;//echo $password;//echo $yzm;$cookie_file = tempnam('./temp','cookie');$login_url = 'http://xk.shnu.edu.cn:82/index.aspx';$post_fields = array("cktime"=>"3153600","__VIEWSTATE"=>"/wEPDwUKMTU3NjIwMDY1MQ9kFgICAw9kFgQCEQ88KwAJAQAPFgQeCERhdGFLZXlzFgAeC18hSXRlbUNvdW50AghkFhBmD2QWAmYPFQQx5pys5a2m5pyf5a2m55Sf5oiQ57up6K+35LqOMjAxNOW5tDHmnIgyNuaXpeafpeivoggwMDAwMDAzMzHmnKzlrabmnJ/lrabnlJ/miJDnu6nor7fkuo4yMDE05bm0MeaciDI25pel5p+l6K+iCDIwMTQwMTE2ZAIBD2QWAmYPFQQ3MjAxMee6p+acrOenkeeUn+WPr+S7peWPguWKoOS4iua1t+W4gumrmOagoeWFseS6q+ivvueoiwgwMDAwMDAzMjcyMDEx57qn5pys56eR55Sf5Y+v5Lul5Y+C5Yqg5LiK5rW35biC6auY5qCh5YWx5Lqr6K++56iLCDIwMTMxMjIwZAICD2QWAmYPFQQd5Yid6YCJMjAxM+W5tDEy5pyIMTLml6XlvIDlp4sIMDAwMDAwMzEd5Yid6YCJMjAxM+W5tDEy5pyIMTLml6XlvIDlp4sIMjAxMzExMjhkAgMPZBYCZg8VBHPlhbPkuo7miJHmoKEyMDEx57qn5pys56eR55Sf5Y+C5Yqg5LiK5rW35biC6auY5qCh5YWx5Lqr6K++56iL6YCJ6K++4oCc56Gu6K6k44CB5aKe6YCJ44CB6YCA5pS56YCJ4oCd5bel5L2c55qE6YCa55+lCDAwMDAwMDMwc+WFs+S6juaIkeagoTIwMTHnuqfmnKznp5HnlJ/lj4LliqDkuIrmtbfluILpq5jmoKHlhbHkuqvor77nqIvpgInor77igJznoa7orqTjgIHlop7pgInjgIHpgIDmlLnpgInigJ3lt6XkvZznmoTpgJrnn6UIMjAxMzA5MDJkAgQPZBYCZg8VBCTlrabnlJ/or7fms6jmhI/vvJrmnJ/mnKvmnIDmlrDpgJrnn6UIMDAwMDAwMjkk5a2m55Sf6K+35rOo5oSP77ya5pyf5pyr5pyA5paw6YCa55+lCDIwMTMwNzE2ZAIFD2QWAmYPFQQn6K+35ZCE5L2N5ZCM5a2m5LiN6KaB6ZSZ6L+H5aSN6YCJ5pe26Ze0CDAwMDAwMDI4J+ivt+WQhOS9jeWQjOWtpuS4jeimgemUmei/h+WkjemAieaXtumXtAgyMDEzMDYyNGQCBg9kFgJmDxUEJ+S4iua1t+W4gumrmOagoeWFseS6q+ivvueoi+mAieivvumAmuefpQgwMDAwMDAyNyfkuIrmtbfluILpq5jmoKHlhbHkuqvor77nqIvpgInor77pgJrnn6UIMjAxMzA2MjFkAgcPZBYCZg8VBDflhbPkuo4yMDEz5bm056eL5a2j5YWl5a2m5paw55Sf5L+h5oGv5qC45a+55pON5L2c5oyH5Y2XCDAwMDAwMDE2N+WFs+S6jjIwMTPlubTnp4vlraPlhaXlrabmlrDnlJ/kv6Hmga/moLjlr7nmk43kvZzmjIfljZcIMjAxMzA5MDZkAhMPD2QPDxQrAAEWCB4ETmFtZQULc3RyQ29uZHRpb24eBFR5cGULKVxTeXN0ZW0uVHlwZUNvZGUsIG1zY29ybGliLCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4ORIeDERlZmF1bHRWYWx1ZQVlIGlkX01zZyBpbiAoIHNlbGVjdCBpZF9Nc2cgZnJvbSBYeE1zZ05vdGlmeVJvbGUgd2hlcmUgUm9sZUlkID0gJzAwMDEwMDA1Jykgb3JkZXIgYnkgcmVsZWFzZWRhdGUgZGVzYyAeDlBhcmFtZXRlclZhbHVlZBQrAQECA2RkZGIgE9UDulG9GvRO4dsU+SdCCEFM","__EVENTVALIDATION"=>"/wEWBgKY0u7vCwLT8dy8BQLG8eCkDwKuqciQCQKC3IeGDAKO8J4Nk+MLn7wUWUDvvoz1eyVjqKX9ZAs=","btnLogin"=>"登陆","txtUserID"=>$user,"txtUserPwd"=>$password,"txtValidateCode"=>$yzm);

你在 pos 页面中
$cookie_file = tempnam('./temp','cookie');
你在获取验证码程序中
$cookie_file =  $filedir."/cookie.txt";

整个过程中使用了不同的 cookie 文件,显然不能保证 cookie 是一致的
版主  我现在模拟登陆成功了,我后来发现查询成绩不需要验证码
  我只是把隐藏值也传进去了 就ok了
   但现在又有个问题   就是有时候显示成绩,有时候又是什么都没有

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。