簡體   English   中英

使用請求登錄后獲得受限頁面,urllib2 python

[英]get restricted page after login using requests,urllib2 python

我正在嘗試使用python-requests登錄頁面

headers = {
    'content-type': 'application/x-www-form-urlencoded',
    'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/33.0.1750.152 Chrome/33.0.1750.152 Safari/537.36'
}

data = {
    'username':myusername,
    'password':mypassword,
}
r = requests.post(url,data=data,headers=headers)

我嘗試通過print r打印返回的響應,並且輸出為<Response [200]>但是html頁面是登錄頁面,但是我期望登錄后將重定向到其他頁面的html。

登錄表單包含幾個隱藏字段:

<input type="hidden" name="lt" value="LT-1314930-GPfgUfyUj5eRY4RCaoa1Xi3gi5Jfsf" />
<input type="hidden" name="execution" value="e3s1" />
<input type="hidden" name="_eventId" value="submit" /> 

第一個字段(很可能是第二個字段)很可能會自動生成並綁定到會話。 您需要首先(使用會話)加載登錄頁面,解析這些字段並將其包含在POST中。

您收到200條響應的原因是,該站點未經授權的請求重定向回登錄頁面。 檢查r.history ,該列表中將有一個或多個302響應。

您可以使用BeautifulSoup進行解析,也可以使用robobrowser (將requests和BeautifulSoup結合在一起),以及專用的表單處理程序來制作類似於瀏覽器的框架來瀏覽網站:

from robobrowser import RoboBrowser

browser = RoboBrowser(history=True,
    user_agent='Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/33.0.1750.152 Chrome/33.0.1750.152 Safari/537.36')
browser.open('http://selleraccounts.snapdeal.com/')

form = browser.get_form(id='fm1')
form['username'].value = myusername
form['password'].value = mypassword
browser.submit_form(form)

兩件事:1.僅因為登錄請求的響應代碼為200並不意味着它成功。 可能是由於任何原因,開發人員均未遵循REST准則,並返回200並帶有表示錯誤的正文。

  1. 當我嘗試登錄啟用了我的Chrome開發人員工具的網站時,我檢查了訪問量,發現該網站傳輸的不僅僅是用戶名和密碼。 具體來說,還有其他4個字段:

     username:adb password:asdf lt:LT-1315009-vg7Xm5MTSfBYkGNuaiUbAFZqVZNmoP execution:e2s1 _eventId:submit submit:LOGIN 

我懷疑其中有些是反CSRF令牌,您可能需要從最初收到的登錄頁面中抓取這些令牌,但是無論我認為登錄請求都不會通過,除非您為每個令牌提供正確的值,領域。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM