2017-04-10 158 views
0

我試圖使用python請求登錄到網頁,結果是相同的登錄頁面,沒有任何登錄錯誤。Python請求登錄 - 返回的登錄頁面沒有錯誤

這是登錄表單:

<form method="post" action="login.php" id="yw0" class="well form-horizontal"> 
     <div class="login"> 
         <div class="form"> 
       <div class="control-group"> 
        <label for="userInput" class="control-label required">Benutzer</label> 
        <div class="controls"> 
         <input type="text" 
           name="loginName" 
           maxlength="32" 
           id="userInput"> 
         <span style="display:none" 
           class="help-inline error" 
           id="VierCom_Base_Models_LoginForm_username_em_"></span> 
        </div> 
       </div> 
       <div class="control-group"> 
        <label for="VierCom_Base_Models_LoginForm_password" class="control-label required">Passwort</label> 
        <div class="controls"> 
         <input type="password" 
           name="loginPwd" 
           maxlength="32" 
           id="VierCom_Base_Models_LoginForm_password"> 
          <span style="display: none" 
            class="help-inline error" 
            id="VierCom_Base_Models_LoginForm_password_em_"></span> 
        </div> 
       </div> 
       <div class="control-group"> 
        <div class="controls"> 
         <button type="submit" 
           name="btnLogin" 
           class="btn">Login</button> 
        </div> 
       </div> 
      </div> 
     </div> 
    </form> 

這是我的Python代碼:

import requests 
import re 
import requests.utils, pickle 
import argparse 
import time 
from bs4 import BeautifulSoup 
import csv 

user_field = "loginName" 
pass_field = "loginPwd" 

with requests.session() as c: 
      login_url = 'https://login.professional-cockpit.de/login.php' 
      after_login_url = 'https://login.professional-cockpit.de/qlikView.php' 

      USERNAME = "*********" 
      PASSWORD = "*********" 
      c.get(login_url) 

      login_data = dict(user_field=USERNAME,pass_field=PASSWORD) 

      ### login to website 
      res = c.post(login_url, data=login_data) 

      print(res.text) 

當我從瀏覽器登錄,這是請求頭:

POST /login.php HTTP/1.1 
Host: login.professional-cockpit.de 
Connection: keep-alive 
Content-Length: 51 
Cache-Control: max-age=0 
Origin: https://login.professional-cockpit.de 
Upgrade-Insecure-Requests: 1 
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36 
Content-Type: application/x-www-form-urlencoded 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
Referer: https://login.professional-cockpit.de/login.php 
Accept-Encoding: gzip, deflate, br 
Accept-Language: en-US,en;q=0.8,he;q=0.6,de;q=0.4 
Cookie: PHPSESSID=g28c793759o9nthgrhd0p99536 

我嘗試了所有的東西並搜索了很多次。 我將不勝感激任何幫助。

+0

只是爲了測試目的,嘗試通過硬編碼'Cookie' –

+0

我得到了相同的結果 –

+0

你試過欺騙用戶代理或引用? –

回答

0

您的有效載荷不是必需的。始終使用Chrome的開發人員選項卡(網絡)外包真實後/獲取信息

使用該有效載荷

payload = {'loginName':user_field, 
      'loginPwd':password_field, 
      'btnLogin':''} 

你的字典是這樣的:

payload = {'user_field':user_field, 
      'pass_field':pass_field} 

該字典的鍵沒有真實數據的名稱相同,而您錯過了btnLogin字段。可悲的是,有任何虛假信息,網絡服務器會拋棄你的請求,因爲它具有必須通過的特定「硬編碼」值。

+1

我不知道我怎麼錯過了,但你是完全正確的!非常感謝你。 –

+0

我認爲這是缺少的就是btnLogin,用戶和密碼字段變量。 –

+0

所以是現在的工作? –