1.クッキーはじめに
HTTPプロトコルはステートレスです。そのため、他の手段を用いた場合、リモートサーバーとクライアントが通信を行っていたものを前に知ることができません。クッキーはの一つである「他の手段。」クッキーA一般的なアプリケーションのシナリオは、サイトにログインしているユーザーを記録するために使用されます。
- 成功したユーザーがログインした後、次のサーバは、(通常は暗号化された)クッキーファイルを送信します。
- クライアント(通常はWebブラウザ)は、受信したファイルのCookieを保存します。
- クッキーを送信するために、サーバーへの次回のクライアントが接続するには、サーバはその意味を確認し、サーバーにファイル(再度ログインを避けるために)記録さリストア。
2。 requests使用cookie
クライアントとしてブラウザがリモートサーバーに接続されている場合、リモートサーバーは、セッションIDを生成するために必要な、そしてクッキーにブラウザに添付されます。次回は、しかし限り、クッキーの接続、ブラウザおよびリモートサーバとして、このセッションIDを使用します;とブラウザが適切なクッキーを維持するために、サーバとのコラボレーション自動的になります。
では requests
、中央だけでなく。私たちは、作成することができます requests.Session
生成されたリモートサーバーと通信し、後のセッションでは、クッキーを requests
自動的に私たちのためのセーフガードを。
3. POSTフォーム
POSTメソッドは、フォームの形でリモート・サーバに送信されるユーザデータの集合であってもよいです。フォームの内容に応じて、リモートサーバ、対応する移動を受信した後。
呼び出され requests
POSTメソッドを使用することができたときに data
一つの構造パラメータPythonの辞書を受信します。 requests
Pythonの辞書が自動的にフォームの実際の内容にシリアライズ。例えば:
インポート要求 cs_url = 'http://httpbin.org/post' my_data = { 'KEY1': '値1'、 'KEY2': '値2' } R = requests.post(cs_url、データ= my_data) 印刷r.content
GitHubの上で現実的なシミュレーションのログをお試しください4
シミュレーションログの最初のステップは、まず私たちは、ブラウザのログインが発生したかを把握する必要があります。
GitHubのログインページがある https://github.com/login 。私たちはまず、ブラウザのクッキーの記録をオフにして、Chromeでログインページを開きます。ユーザー名とパスワードを入力した後、我々は、ボタンの上に署名し、レビューツール(見つけネットワーク]タブ)のタンパーChromeとChromeの要素を開きます。
タンパークロームでは、我々はそれを見つけた:ログインページですが https://github.com/login が、実際にフォームを受信することがある https://github.com/session 。ログインに成功すると、その後にジャンプ https://github.com/ 家、リターン・ステータスコード 200
。
Chromeの要素を点検ウィンドウで、我々は、提出する見ることができます session
フォームインタフェースを。内部は含まれてい
コミット UTF8 authenticity_token ログイン パスワードを
その中でも、 commit
そして utf8
二人は一定であり、 login
かつ password
、十分に理解されているユーザー名とパスワード、です。例外が authenticity_token
不規則な文字の長いリストである、我々はそれが何であるかを知りません。
POSTアクションはで行われる session
前インタラクティブインターフェース、従って情報の可能なソースは、 login
インターフェイス。私たちは、オープンソースのログインページ、を検索してみてください authenticity_token
、次のことを見つけることは難しいことではありません。
<入力名= "authenticity_token" タイプ= "隠れた" 値= "..." />
これは、いわゆることが判明した authenticity_token
だけで、HTMLページに書かれて理解することである hidden
隠されたパターン。この目的のために、我々は唯一、罰金をそれを解決するために、通常のPythonライブラリを使用する必要があります。
import requests import re login_url = 'https://github.com/login' user = 'user' //具体账号 password = 'password' //具体密码 user_headers = { 'User-Agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36', 'Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Accept-Encoding' : 'gzip', 'Accept-Language' : 'zh-CN,zh;q=0.8,en;q=0.6,zh-TW;q=0.4' } session = requests.Session() response = session.get(login_url, headers = user_headers) pattern = re.compile(r'<input name="authenticity_token" type="hidden" value="(.*)" />') authenticity_token = pattern.findall(response.content)[0] login_data = { 'コミット'、 'ログイン' 'UTF8': '%E2%9C%93'、 'authenticity_token':authenticity_token、 'ログイン':ユーザ 'パスワード':パスワード } session_url = 'https://github.com/session' 応答= session.post(session_url、ヘッダー= user_headers、データ= login_data)
1.まず、我々は準備ができてとChrome一貫性のあるHTTPリクエストのヘッダー情報です。具体的には、これ User-Agent
より重要です。
2.通信は、我々が作成し、ブラウザとサーバ上でモデル化 requests.Session
。
3.私たちは、GETメソッドを使用してログインページを開き、そして決意は、通常のライブラリを使用します authenticity_token
。
4.必要なデータ、Pythonの辞書login_dataへの準備
5.最後に、POSTメソッドは、フォームをに提出さ session
インターフェース。
6.最終結果を通じて 302
ジャンプ、オープン( 200
)GitHubのページ。