[英]I am not able to log in into a website using post requests python
我正在嘗試通過傳遞用戶名和密碼登錄網站。它說 session cookie 丟失。我是 api 的初學者。我不知道我是否在這里錯過了一些東西。網站是Z80791://B3AE7002CB88C24687。親/登錄
import urllib3
http = urllib3.PoolManager()
url = 'http://testing-ground.scraping.pro/login?mode=login'
req = http.request('POST', url, fields={'usr':'admin','pwd':'12345'})
print(req.data.decode('utf-8'))
您的代碼中有兩個問題導致您無法成功登錄。
在代碼中,您使用urllib3
發送內容類型multipart/form-data
。 但是,該網站似乎只接受內容類型application/x-www-form-urlencoded
。
嘗試以下 cURL 命令:
curl -v -d "usr=admin&pwd=12345" http://testing-ground.scraping.pro/login?mode=login
curl -v -F "usr=admin&pwd=12345" http://testing-ground.scraping.pro/login?mode=login
對於第一個,您的請求 header 中的內容類型是application/x-www-form-urlencoded
,因此網站會使用它並讓您登錄(帶有302 Found
響應)。
然而,第二個發送內容類型為multipart/form-data
。 該網站不接受它,因此拒絕您的登錄請求(回復200 OK
)。
另一個問題是urllib3
默認遵循重定向。 更重要的是, urllib3
默認不處理 cookie(即在以下請求中存儲和發送)。 因此,第二個請求不會包含 cookie tdsess=TEST_DRIVE_SESSION
,因此網站會返回您未登錄的消息。
如果只關心登錄請求,可以試試下面的代碼:
import urllib3
http = urllib3.PoolManager()
url = 'http://testing-ground.scraping.pro/login?mode=login'
req = http.request('POST', url, data={'usr':'admin','pwd':'12345'}, encode_multipart=False, redirect=False)
print(req.data.decode('utf-8'))
encode_multipart=False
指示urllib3
發送內容類型為application/x-www-form-urlencoded
數據; redirect=False
告訴它不要遵循重定向,以便您可以看到初始請求的響應。
但是,如果您確實想完成整個登錄過程,則需要保存第一個響應中的 cookie 並在第二個請求中發送它。 你可以用urllib3
,或者
我不確定您是否有任何特殊原因使用urllib3
。 如果你實現得好, Urllib3
肯定會工作,但我建議嘗試使用Request
庫,它更容易使用。 對於您的情況,以下帶有Request
的代碼將起作用並讓您進入歡迎頁面:
import requests
url = 'http://testing-ground.scraping.pro/login?mode=login'
req = requests.post(url, data={'usr':'admin','pwd':'12345'})
print(req.text)
import requests
auth_credentials = ("admin", "12345")
url = "http://testing-ground.scraping.pro/login?mode=login"
response = requests.post(url=url, auth=auth_credentials)
print(response.text)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.