2017-11-02 14 views
1

私はPythonのリクエストモジュールを使用してWebページにログインしようとしています。ページをリロードせずにPythonのPOSTリクエスト

ここにシナリオがあります: ユーザー名パスワードを入力して送信をクリックすると、応答Webページが取得され、ユーザーはセキュリティに関する質問に回答する必要があります。

ので、

POSTリクエスト1 - ユーザ名を提出し、パスワード

レスポンス1 - セキュリティの質問を含むページ

この部分は非常に単純です。

しかし、次のステップでは、セキュリティに関する質問への回答を提出するために、別の投稿要求を行う必要があります。そのためにページを再読み込みする必要があります。しかし、一度リロードすると、最初のログインページ(ユーザー名とパスワードのフィールドを持つ)が返されます。

回避策はありますか?

編集:私はすべての要求

を実行するためにrequests.Session()オブジェクトを使用していますここでは、コード

s = requests.Session() 

login = {'username': username, 'password': password} 
url = 'https://login.xyz.com' 
r = s.post(url, data=login) 

# r.url is also https://login.xyz.com 

answers = {'question1': answer1, 'question2': answer2} 
r = s.post(url, data=answers) 
+0

どこにあなたのコードですか?あなたは同じセッションですか? – schwobaseggl

+1

あなたのログイン結果は、おそらくクッキーとリダイレクトURLです。ブラウザーでログインアクション全体を実行し、そのページで正味のトラフィックをキャプチャしてみてください(FirefoxまたはChromeでは、開発ツールページ - F12-で行うことができます)。キャプチャされたトラフィックの各要求を確認し、それに応じて自動化を試みます。私が正しい場合、操作の順序は次のようにする必要があります:ログインデータを投稿し、応答を取得し、認証Cookieの応答を解析し、そのCookieを含む新しい投稿要求でリダイレクトを行います。 – BoboDarph

+0

証明書チェックを無効にしないで、対象のWebサイトに接続しようとすると、Webサイトのssl証明書CNAMEが無効(自己署名または偽造)になるため、エラーが発生します。ウェブサイトに何か他のものを送る前に、レスポンスコードを200などに検証することができます。 – BoboDarph

答えて

2

あなたは、ログインした後、サーバーから取得したクッキーを維持するためにセッションを使用する必要があります

s = requests.Session() 
s.post('first url') 
s.post('second url') 

ここドキュメントと例を参照してください:。http://docs.python-requests.org/en/master/user/advanced/

+0

申し訳ありませんが、 'requests.Session()'を使っていますが、うまくいかないようです。 –

+0

それでは、コード – uppi

+0

ちょっと仲間を指定しない限り、何か具体的なことを伝えるのは難しいです。質問にコードを追加しました。 –

1

は、ログインページはあなたにいくつかのセッションIDを送信した場合、あなたが確認しましたですか?通常はHTTP Cookieに格納されます。

この場合、2回目の投稿要求内で送信する必要があります。

+0

なぜ-1?私の答えは理にかなっていると思います! – Charlie

+0

おそらく、これはコメントとして適切でしょう。 –

関連する問題