ホームページ >バックエンド開発 >Python チュートリアル >Python でログインをシミュレートし、Cookie を保持する方法の詳細な例

Python でログインをシミュレートし、Cookie を保持する方法の詳細な例

Y2J
Y2Jオリジナル
2017-05-02 15:05:051642ブラウズ

シミュレートされたログインは誰にとってもよく知られていると思います。次の記事では、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(&#39;https://nosec.org/users/sign_in&#39;)
  html = r.text
  p1 = re.compile(r&#39;city_token" value="(.*?)"&#39;)
  res = re.search(p1,html)
  authenticity_token = str(res.group(1))
  print &#39;authenticity_token:&#39;,authenticity_token
  # print &#39;cookies&#39;,self.s.cookies
  # print s.cookies
  data = {
   &#39;authenticity_token&#39;:authenticity_token,
   &#39;user[login]&#39;:&#39;xxxxx&#39;,
   &#39;user[password]&#39;:&#39;xxxxx&#39;
  }
  r = self.s.post(&#39;https://nosec.org/users/sign_in&#39;,data=data)
  # print r.headers
  # print r.request.headers
  # print self.s.cookies
  print &#39;[*] OK!&#39;
  return True

调用了 login 方法后 下次直接用self.s.get()

コード

クラスXXXのloginメソッドを使ってログインをシミュレートしているので、ログインコードのこの部分を載せておきます。

rrreee🎜login メソッドを呼び出した後、次回 self.s.get() を直接使用して Web ページをリクエストすると、Cookie が含まれます。 🎜🎜🎜私は一度はそのアイデアに騙され、もう一回はタイプミス(https が http と書かれていた)に騙され、この「バグ」 = = を発見するまで長い間気が狂いそうになったので、コードに感謝しなければなりませんバグ除去の効率向上のため 2333! 🎜🎜🎜概要🎜🎜

以上がPython でログインをシミュレートし、Cookie を保持する方法の詳細な例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。