ホームページ  >  記事  >  バックエンド開発  >  discuz はログインをシミュレートして自動トップ投稿 php プログラムを実装します_PHP チュートリアル

discuz はログインをシミュレートして自動トップ投稿 php プログラムを実装します_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 17:07:521050ブラウズ

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'])) {ここで確認できます: authkey は設定ファイルの authkey と 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 ']);

実際、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);

コードは共有されず、有能な友人が自分で書くことができますが、これは簡単に混乱を引き起こす可能性があります

www.bkjia.com本当http://www.bkjia.com/PHPjc/629893.html技術記事 PHP でログインをシミュレートするには、curl_init 関数を使用する必要があります。 次に、curl を使用して discuz フォーラムへのログインの投稿をシミュレートし、自動投稿機能を実装する方法を紹介します。 実際、模擬ログインはただそれだけで何もありません...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。