ホームページ >バックエンド開発 >PHPチュートリアル >模擬ログイン。確認コードを入力する必要があります。
模擬ログインには確認コードの入力が必要です
最近、興味があり、Zhihu.com で模擬ログインをしてみたいと思いました。しかし、認証コードを入力する必要があるという問題が発生しました
何度もブラウザでログインしてみて、いくつかのルールを学びました。
確認コードを入力する必要がある場合、Yan 確認コードを取得するときに、再度確認コードを取得するたびに、対応する Cookie が一度変更されます。
すると、私はcurlを使用しています。ログインをシミュレートするときに、検証コードCookieが返送されましたが、毎回検証コードエラーが表示されます。
最大 4 つのパラメータを送信する必要があります。 _xsrf と同様に、送信する必要はありません。または、
を使用して、このリンクと同様の特定のコードを実装できます。この方法も使用できません
http://www.cnblogs.com/echo-something/archive/2012/07/18/2597831.html
<br>< ? php<br />/**<br /> * @author Chasing__something<br /> * @version $id<br />*/<br />define('SCRIPT_ROOT',dirname(__FILE__).'/');<br />$act = trim(isset($_REQUEST['act']) ? $_REQUEST['act'] : "");<br />switch($act)<br />{<br /> case 'login':<br /> // 確認コードを取得<br /> $code = trim($ _REQUEST ['コード']);<br /> <br /> ] = '123123';<br /> $loginParams['email'] = [email protected]';<br /> $loginParams['captcha'] = $ code;<br /> <br /> // $cookieFile がロードされます コードの検証時に保存された cookie ファイル名 <br /> $cookieFile = SCRIPT_ROOT.'cookie.tmp';<br /> <br /> // $targetUrl ターゲット アドレス送信者:curl <br /> $targetUrl = 'http://www.zhihu.com/login';<br /> = "http://www.zhihu.com";<br /> <br /> echo vget( $targetURL );<br /> break;<br /> case 'authcode':<br /> ('Content-Type:image/png');<br /> showAuthcode('http://www.zhihu.com/captcha.gif' );<br /> exit;<br /> Break;<br />}<br /><br />/**<br /> * 模擬ログイン <br /> * @param string $url 送信アドレス <br /> * @param string $cookieFile クッキーを保存するファイル <br /> * @param string $loginParams 送信時に送信するパラメータ <br /> * @戻り文字列 $content 返されたコンテンツ<br />*/<br />functioncurlLogin($url, $cookieFile, $loginParams)<br />{<br /> $header = array(<br /> 'Accept:*/*', <br /> 'Accept-Encoding:gzip,deflate,sdch',<br /> 'Accept-Language:zh-CN,zh;q=0.8 ,zh-TW;q=0.6',<br /> 'キャッシュ制御: キャッシュなし',<br /> '接続:キープアライブ',<br /> 'Content-Type:application/x-www-form- urlencoded; charset=UTF-8',<br /> 'ホスト:www.zhihu .com',<br /> 'オリジン:http://www.zhihu.com',<br /> 'リファラー:http://www .zhihu.com',<br /> 'X-Requested-With:XMLHttpRequest' <br /> );<br /> <br /> $curl =curl_init() //curl セッションを開始します<br />curl_setopt($curl, CURLOPT_URL, $url); //アクセスするアドレス<br />curl_setopt($curl, CURLOPT_HTTPHEADER, $header) //HTTP ヘッダフィールドの配列を設定します<br />curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); /認証証明書のソースを確認してください<br />curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2); //証明書から SSL 暗号化アルゴリズムが存在するかどうかを確認します<br />curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like) Gecko ) Chrome/33.0.1750.22 Safari/537.36'); //ユーザーが使用するブラウザをシミュレートします<br />curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1) ; cookieFile); //同時に Cookie を送信します<br />curl_setopt($curl, CURLOPT_TIMEOUT, 30) //無限ループを防ぐためにタイムアウト制限を設定します<br /> $result =curl_exec($curl); / /curl を実行しますsession<br /> <br /> if (curl_getinfo($curl, CURLINFO_HTTP_CODE) == '200') {<br /> $headSize =curl_getinfo($curl, CURLINFO_HEADER_SIZE);<br /> }<br /> <br /> $this- >_cookies($result);<br> <br>curl_close($curl); <br><br>