2017-04-10 163 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

所以是现在的工作? –