2015-04-21 104 views
0

以下是我迄今爲止所做的工作。我不得不手動提取CSFRToken(我不知道正則表達式,所以這部分很混亂)。 CSFR是Cookie的一部分嗎?因爲我的cookie只顯示了其他兩個ID類型的參數,所以我放棄了Cookie部分並以此方式完成。在python3中使用請求模塊登錄到本網站

import requests 


URL = r'http://login.cheezburger.com/' 
client = requests.session() 
login_page = client.get(URL) 
index = login_page.text.find("CSRFToken") 
token = login_page.text[index:index+90].split('"')[-2] # This works, I guarantee :) 
#print(token)   I checked it manually 


login_data = {'rlm': 'Shopper', 
       'for': r'http://login.cheezburger.com/', 
       'username': 'myusername', 
       'password': 'mypassword', 
       'CSRFToken': token} 
req = client.post(URL, data=login_data) 

現在,有每說沒有錯誤,但我沒有這個網站或者登錄。此請求的文本顯示我仍然卡在登錄頁面!

的參數發送是(如圖火狐的開發工具):

rlm: 'Shopper' 
for: 'http://login.cheezburger.com/' 
username: 'myusername', 
password: 'mypassword', 
CSRFToken: '8uhhbf67-1233-fff3-123g1-123123fsdfs22' 

的網站的源如下(包含表單數據的部分):

<div class="contents-msl"> 
    <h2>Client Login</h2> 
    <p>Enter username and password</p> 
    <div class="form-all-msl"> 
     <form action="/login.action" id="loginForm" method="post" 
       enctype="application/x-www-form-urlencoded"><input type=hidden name=rlm 
                   value="Shopper"><input 
       type=hidden 
       name=for 
       value="http%3a%2f%2flogin%cheezburger%2ecom%2f"> 
      <ul class="form-section-msl"> 
       <label class="form-label-left-msl" for="loginUserName"> 
        Username<span class="form-required">*</span> 
       </label> 

       <div class="form-input-msl"> 
        <input type="text" class="form-textbox-msl" id="loginUserName" name="username" 
          size="20"> 
       </div> 
       <label class="form-label-left-msl" for="loginPwd"> 
        Password<span class="form-required-msl">*</span> 
       </label> 

       <div class="form-input-msl"> 
        <input type="password" class="form-textbox-msl" id="loginPwd" name="password" 
          size="20"> 
       </div> 
       <div class="form-input-msl"> 
        <div class="form-single-column-msl"> 

        </div> 
       </div> 
      </ul> 
    </div> 


      <button class="members-btn-msl" type="submit">Login</button> 
<input type="hidden" name="CSRFToken" class="CSRFToken" value="8uhhbf67-1233-fff3-123g1-123123fsdfs22" />     </form> 
     </div> 
    </div> 

回答

0

你也許想添加一些頭

headers = { 
'Accept': 
    'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 
'Accept-Encoding': 
    'gzip, deflate, sdch', 
'Accept-Language': 
    'en-US,en;q=0.8,vi;q=0.6', 
'Cache-Control': 
    'max-age=0', 
'Connection': 
    'keep-alive', 
'User-Agent': 
    'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36', 

}

然後頭添加到您的代碼:

req = client.post(URL, data=login_data) 

祝你好運!