ホームページ >バックエンド開発 >Python チュートリアル >Python でログインをシミュレートし、Cookie を保持する方法の詳細な例
シミュレートされたログインは誰にとってもよく知られていると思います。次の記事では、Python のシミュレートされたログインと Cookie の保持方法を主に紹介します。この記事の紹介は、それを必要とする友人にとって一定の参考になります。一緒に見てみましょう。
前書き
最近、nosec.org のデータをクロールしていて、キャプチャしたいデータにアクセスする前に、ログインをシミュレートして Cookie を取得する必要があることがわかりました。 nosec.org のログイン ページ フォームの authentication_token フィールド。ログイン ページはアクセスするたびに自動的に生成され、ユーザー名とパスワードとともにサーバーに POST されます。
いくつかの調査の結果、Web サイトのログイン インターフェイスに直接アクセスすると、サーバーの応答ヘッダーには次のような Set-Cookie フィールドが含まれることがわかりました:
_nosec_session=ZTlHNmxuZXE4R0s1UXpsVUxGRTNPblNBWFd2TXU4TU9aNWVJM2lyLzNFY0pLeUdNMDY1cmZqanpkc0ppaGtjU i9kTGdWenBrNXJKenNqbnN2YUxucE1DRW5UMHNTR1RxWDZPeGlLazllTmY1czVpYWplazJXdWkvZS9wUHJpc1Jya3ZzcmNVMytPR it2T1dEcGx4bHNDTTVzSmVTb0xhSjRycE03QUl5RXE5Z2tZWG1mTHFBWGx1QW52QjBURi8rLS1acE8yeVRtMFRZR1JWdExneStwdmpRPT0 %3D--a6ccd9a12a8af5c8b5fb6625c24bb4db0398c503; path=/; HttpOnly
そして、ページ フォームには、authentication_token の入力があり、コンテンツは次のとおりです。以下:
<input type="hidden" name="authenticity_token" value="cGdhqVxDMRndpKbpvIV66wfEQlGf4Rz6UtXqsf79brEvFveHw2rCc6uz3euFEyUlpuA0azt5uNhnmrUiCaAyUg==" />
以前は、バックエンド ロジックに従って _nosec_session の値を分析し、それを復号化し、さまざまな xx メソッドを通じて authentication_token の値を取得し、その後、ユーザー名とパスワードを投稿するだけでした。最終的に、これが次であることがわかりました。本当に資本のバカだ! ! いつもバックエンド思考で問題ばかり考えていて、最近は歩くこともままなりません。したがって、生成されたauthenticity_token値をページから直接取得し、POSTに従ってください。
リクエスト ライブラリの Session()
メソッドを使用すると、初期の段階で cookielib を直接使用するよりもはるかに便利です。 Session()
方法,确实很好用,比早期直接拿 cookielib 就干方便多了。
代码
类XXX 的 login 方法用来模拟登录,就贴出这部分登录的代码好了。
class XXX: def login(self): r = self.s.get('https://nosec.org/users/sign_in') html = r.text p1 = re.compile(r'city_token" value="(.*?)"') res = re.search(p1,html) authenticity_token = str(res.group(1)) print 'authenticity_token:',authenticity_token # print 'cookies',self.s.cookies # print s.cookies data = { 'authenticity_token':authenticity_token, 'user[login]':'xxxxx', 'user[password]':'xxxxx' } r = self.s.post('https://nosec.org/users/sign_in',data=data) # print r.headers # print r.request.headers # print self.s.cookies print '[*] OK!' return True
调用了 login 方法后 下次直接用self.s.get()
コード
クラスXXXのloginメソッドを使ってログインをシミュレートしているので、ログインコードのこの部分を載せておきます。
rrreee🎜login メソッドを呼び出した後、次回self.s.get()
を直接使用して Web ページをリクエストすると、Cookie が含まれます。 🎜🎜🎜私は一度はそのアイデアに騙され、もう一回はタイプミス(https が http と書かれていた)に騙され、この「バグ」 = = を発見するまで長い間気が狂いそうになったので、コードに感謝しなければなりませんバグ除去の効率向上のため 2333! 🎜🎜🎜概要🎜🎜以上がPython でログインをシミュレートし、Cookie を保持する方法の詳細な例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。