PHP でログインをシミュレートするには、curl_init 関数を使用する必要があります。次に、curl を使用して discuz フォーラムへの投稿ログインをシミュレートし、自動投稿機能を実装する方法を紹介します。
実際、ログインのシミュレートは、対応するパラメーターを取得し、送信をシミュレートし、取得した COOKIE を次のステップに持ち込むだけです
フラッディングを防ぐために、discuzx シリーズは formhash() 関数を使用しています:
1. フォームハッシュ関数を見てみましょう:
コードは次のとおりです |
コードをコピー |
関数フォームハッシュ($specialadd = '') {
グローバル $_G;
$hasadd = 定義('IN_ADMINCP') 'Discuz のみ' : '';
return substr(md5(substr($_G['timestamp'],0,-7).$_G['username'].$_G['uid'].$_G['authkey'].$hashadd.$specialadd )、8、8);
}
|
注: 生成方法:
1. 傍受されたタイムスタンプ
2. ユーザー名
3. ユーザーID
4.認証キー
5. hashadd(固定値)
6.specialadd(固定値)
ユーザー名とユーザー ID があるため、ログイン前とログイン後では生成される値が異なります。つまり、ログイン前とログイン後に 2 回 fromhash を取得する必要があります。
では、認証キーとは何ですか?
2.認証キーについて
//コードの場所:/source/class/discuz/discuz_application.php
コードは次のとおりです
| コードをコピー
|
if(empty($this->var['cookie']['saltkey'])) {
$this->var['cookie']['saltkey'] = random(8);//このステップは心配しないでください
dsetcookie('saltkey', $this->var['cookie']['saltkey'], 86400 * 30, 1, 1);
}
$this->var['authkey'] = md5($this->var['config']['security']['authkey'].$this->var['cookie']['saltkey ']);
|
ここで確認できます: authkey は設定ファイルの authkey と cookie の Saltkey に基づいて生成されます
実際、Web サイトの $this->var['cookie']['saltkey'] の値が常に Cookie に保存されている限り、によって生成された値が保証されます。 formhash は常に同じになります (常に相対的です)
ここでもう一つ言っておきたいこと:
3クッキーシリーズ
Discuz Cookie プレフィックスはランダムに生成されます
コードの場所:/source/class/discuz/discuz_application.php
コードは次のとおりです
コードをコピー |
|
$this->var['config']['cookie']['cookiepre'] = $this->var['config']['cookie']['cookiepre'].substr(md5($ this->;var['config']['cookie']['cookiepath'].'|'.$this->;var['config']['cookie']['cookiedomain']), 0, 4).'_';
ウェブサイトにログインしてここの Cookie 設定を見る限り、接頭辞 hi は確かに変更されません。もちろん、設定ファイルを変更すると確実に変わります 。
どうやって書けばいいのでしょうか?実装のアイデアをお話しましょう
1. ログイン後、Web サイトにアクセスし、Web ページから返されたソルトキー (Cookie) とフォームハッシュ (値) を取得します (ソルトキーはその下にある必要があり、コンテキストは一貫している必要があります)
2. ログインコンテンツを構築し、送信後のシミュレーションを行います (最初のステップで取得した Cookie とフォームハッシュ値を必ず持参してください)
3. ログインに成功したら、ページのフォームハッシュと設定したCookieを取得します(今回取得したフォームハッシュは常に使用できるものです)
4. 投稿とトップ投稿を作成し、ページに送信します (Cookie とフォームハッシュは依然として重要です)
crulを使用してコードのポスト部分をシミュレートするPHPについて
コードは次のとおりです |
コードをコピー |
$ch =curl_init($url) //初期化 ;
curl_setopt($ch, CURLOPT_HEADER, 1) //ヘッダー部分を返しません ;
curl_setopt($ch, CURLOPT_POST, 1);// かどうか
curl_setopt($ch, CURLOPT_RETURTRANSFER, true); // 文字列を直接出力する代わりに返します
curl_setopt($ch,CURLOPT_REFERER,$refer);
curl_setopt($ch, CURLOPT_COOKIE, $tocookies); // ストレージクッキー
curl_setopt($ch, CURLOPT_POSTFIELDS, $datas);
|
コードは共有されず、有能な友人が自分で書くことができますが、これは簡単に混乱を引き起こす可能性があります
|
http://www.bkjia.com/PHPjc/629893.htmlwww.bkjia.com本当http://www.bkjia.com/PHPjc/629893.html技術記事 PHP でログインをシミュレートするには、curl_init 関数を使用する必要があります。 次に、curl を使用して discuz フォーラムへのログインの投稿をシミュレートし、自動投稿機能を実装する方法を紹介します。 実際、模擬ログインはただそれだけで何もありません...