簡體   English   中英

我無法使用發布請求 python 登錄網站

[英]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 命令:

  1. curl -v -d "usr=admin&pwd=12345" http://testing-ground.scraping.pro/login?mode=login
  2. 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.

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