この記事では、Php CURL によるフォーラムへのシミュレートされたログインについて紹介し、データの収集例を紹介します。curl のシミュレートされたログイン機能の使用に興味がある場合は、参考として入力してください。
libcurl は、HTTPS 認証、HTTP POST、HTTP PUT、FTP アップロード (これは PHP の FTP 拡張機能を使用して完了することもできます)、HTTP フォームベースのアップロード、プロキシ、Cookie、およびユーザー名 + パスワード認証もサポートしています。
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
$discuz_url = 'http://www.jb51.net/';//フォーラムのアドレス $login_url = $discuz_url .'login.php?action=login';//ログインページのアドレス
$post_fields = array(); //次の 2 つの項目は変更する必要はありません $post_fields['ログインフィールド'] = 'ユーザー名'; $post_fields['loginsubmit'] = 'true'; //ユーザー名とパスワードは必ず入力してください $post_fields['ユーザー名'] = 'tianxin'; $post_fields['パスワード'] = '111111'; //安全性に関する質問 $post_fields['questionid'] = 0; $post_fields['answer'] = ''; //@todo 確認コード $post_fields['seccoverify'] = ''; //FORMHASH フォームを取得 $ch =curl_init($login_url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $contents =curl_exec($ch); curl_close($ch); preg_match('/ if(!empty($matches)) { $formhash = $matches[1]; } 他 { die('フォーラムハッシュが見つかりません。'); }
//データをPOSTし、COOKIEを取得して、Webサイトの一時ディレクトリにCookieファイルを置きます $cookie_file = tempnam('./temp','cookie'); $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); //キーの Cookie ファイルを取得した後、その Cookie ファイルを使用して投稿をシミュレートできます。fid はフォーラムの列 ID です $send_url = $discuz_url."post.php?action=newthread&fid=2";
$ch =curl_init($send_url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); $contents =curl_exec($ch); curl_close($ch); //ここでのハッシュ コードは、ログイン ウィンドウのハッシュ コードとは異なります。ここでの非表示には追加の id 属性があります 。preg_match('/ if(!empty($matches)) { $formhash = $matches[1]; } 他 { die('フォーラムハッシュが見つかりません。'); }
$post_data = array(); //投稿タイトル $post_data['subject'] = 'test2'; //投稿コンテンツ $post_data['メッセージ'] = 'test2'; $post_data['topicsubmit'] = "はい"; $post_data['extra'] = ''; //タグを投稿する $post_data['tags'] = 'テスト'; //投稿のハッシュ コード、これは非常に重要です。このハッシュ コードが見つからない場合、discuz は、アクセス元のページが間違っていることを警告します $post_data['formhash']=$formhash;
$ch =curl_init($send_url); curl_setopt($ch, CURLOPT_REFERER, $send_url); //REFERER を偽装します curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); $contents =curl_exec($ch); curl_close($ch); //Cookie ファイルをクリーンアップします リンク解除($cookie_file); ?> |
以上がこの記事の全内容ですが、皆さんに気に入っていただければ幸いです。