2016-06-30 3 views
1

私はPythonリクエストモジュールでログインを実行しようとしています。私は最初に自分のユーザー名とパスワードでログインページに投稿して、応答からクッキーを保存します。その後、私はパスワードで保護されたページに入ることを試みます。問題は、このページにログインするために応答ページにCookieを有効にしなければならないと言いますが、表示できるCookieが戻ってきます。Pythonリクエストによるログインの実行(クッキーが有効になっていません)

<input type="hidden" name="security_token" value="kAvcFvod9KSrGLS1JX30+dhNI8QhmVpbqbe00zuvztE="> 
<input type="hidden" name="login_ticket" value="3781fe1e16e441e9957bec8b32aa4630"> 
<input type="hidden" name="resolution" value=""> 
<input type="hidden" name="device_pixel_ratio" value="1"> 

<input type="text" autofocus id="loginname" name="loginname" value="" size="20" maxlength="63"> 
<input type="password" id="password" name="password" size="20"> 

Pythonのコード:

import requests 

login = r'LOGIN_URL' 
url = 'PROTECTED_URL' 

values = {'loginname': 'USERNAME', 'password': r'PASSWORD','security_token' : r'kAvcFvod9KSrGLS1JX30+dhNI8QhmVpbqbe00zuvztE=', 'login_ticket' : r'3781fe1e16e441e9957bec8b32aa4630', 'resolution' : '', 'device_pixel_ratio' : '1'} 

session = requests.Session() 

r = session.post(login, data = values) 
print r.content 
print r.cookies 
s = session.get(url) 

(私はセキュリティトークンとログインチケットを取得ここで は、ログインページからコード

入力パラメータであります前に別の取得要求から) したがって、r.contentはoクッキーがアクティブ化されていないので、基本的に言う:ログインに失敗したWebページ。

しかしr.cookiesからの出力は次のようになります。

<RequestsCookieJar[<Cookie Seminar_Session=abbfdd4e96ee048b1b97fd027a2c7de4 for URL/>]> 

そしてs.getはちょうどあなたがログインしていない場合は取得し、保護されたページにアクセスしようとログインページを返します。

私はすべてうまくいくと思っています。ウェブページには、送信されたクッキーを保存しないと思います。どうすれば回避できますか?

EDIT(ソリューション):

ありがとう! BeautifulSoupで

ソリューション:

import requests 
from bs4 import BeautifulSoup 

login = 'LOGIN_URL' 
url = 'PROTECTED_URL' 

session = requests.Session() 

l = session.get(login) 

soup = BeautifulSoup(l.content,'lxml') 

values = {'loginname': 'USERNAME', 'password': r'PASSWORD','security_token' : soup.find('input')['value'], 'login_ticket' : soup.find('input').next_sibling.next_sibling['value'], 'resolution' : '', 'device_pixel_ratio' : '1'} 

r = session.post(login, data = values) 
s = session.get(url) 

答えて

1

r = session.get(login)とログインページの初期GETをお試しください。次に、session.cookiesにチェックを入れます。セッションクッキーを含める必要があります。また、security_tokenlogin_ticket、およびその他のフィールドのさまざまな値を抽出して、ログインPOSTリクエストに含めることができるようにする必要があります。

重要なポイントは、それ以降のすべての要求のトークンを取得するために使用した同じセッションを使用することです。おそらくサーバーは、セッションIDを割り当てられたトークンに関連付けているので、クライアント側でこれらをまとめておく必要があります。トークンを取得した後に新しいセッションを作成することで、関連付けが失われます。コードで

import requests 

login = r'LOGIN_URL' 
url = 'PROTECTED_URL' 

session = requests.Session() 

r = session.get(login) # retrieve cookie, tokens, and other stuff 

# parse the response to extract the tokens etc. (perhaps use BeautifulSoup). Store in "values". Add username and password to "values" 

r = session.post(login, data=values) # perform the login 

r = session.get(url)     # get the protected page 
関連する問題