我正在嘗試使用我的帳戶登錄網站。在 python 代碼中,我使用:
login_response = session.post('mysite.com', login_data, cookies=session.cookies)
其中session是一個請求會話物件,cookie 正是我在瀏覽器中嘗試相同時發送的 cookie(它是兩個特定的 cookie,當我登錄時作為請求的一部分由瀏覽器發送), login_data是在 post 請求中發送的表單資料字典。
但是,預期的回應是:代碼 303,發送了一個重定向鏈接,以及兩個新的 cookie(即使用登錄會話)。這就是在瀏覽器中發生的事情。當我想使用上面的代碼執行此操作時,我得到的是代碼 200,沒有重定向鏈接,也沒有 cookie。就好像網站只是“重新加載”。表單資料本身(密碼 用戶)是正確的。
我從瀏覽器中讀取了請求內容:
-----------------------------366521339228594542373308740035
Content-Disposition: form-data; name="login__standard_submitted"
1
-----------------------------366521339228594542373308740035
Content-Disposition: form-data; name="csrfKey"
2fcc7af2aa54f0e3ab85a6bdeca26f98
-----------------------------366521339228594542373308740035
Content-Disposition: form-data; name="ref"
aHR0cHM6Ly9jcmltZW1hcmtldC53by8=
-----------------------------366521339228594542373308740035
Content-Disposition: form-data; name="MAX_FILE_SIZE"
20971520
-----------------------------366521339228594542373308740035
Content-Disposition: form-data; name="plupload"
92ee7fd8f0a2249c2327184c5b95d6c9
-----------------------------366521339228594542373308740035
Content-Disposition: form-data; name="auth"
myusername
-----------------------------366521339228594542373308740035
Content-Disposition: form-data; name="password"
password
-----------------------------366521339228594542373308740035
Content-Disposition: form-data; name="remember_me"
0
-----------------------------366521339228594542373308740035
Content-Disposition: form-data; name="remember_me_checkbox"
1
-----------------------------366521339228594542373308740035--
我從中得到的資料,我只是寫進了一個鍵字典:值,例如
'auth': 'myusername'
又是一個tl;dr: 我發送了正確的 cookie 以及在代碼中執行 POST 請求時我觀察到的看似正確的資料。但是,我得到的結果與在瀏覽器中完全不同,并且無法登錄。
我是不是誤會了什么?我需要更改什么才能通過代碼登錄?
編輯:在標題中,我還將'Content-Type'設定為'multipart/form-data',就像在瀏覽器中一樣。編輯 2:相反,如果我將login_data設定為files=,它仍然不起作用。
uj5u.com熱心網友回復:
從我所見,您必須使用 files= 來使用 request.post 發送 multipart/form-data 請求,但是您必須使用元組并將檔案名設定為 NOne,這樣它們就不會作為檔案發送。
login_data = (
('login__standard_submitted', (None, '1')),
('csrfKey', (None, '2fcc7af2aa54f0e3ab85a6bdeca26f98')),
('ref', (None, 'aHR0cHM6Ly9jcmltZW1hcmtldC53by8')),
...
)
login_response = session.post('mysite.com', files=login_data, cookies=session.cookies)
uj5u.com熱心網友回復:
我想知道您的會話物件是否正在發送 http: 請求,而應該發送 https: 請求。這可能會導致帶有 303 回應的重定向。“請求”包似乎可以處理這種型別的回應。
import requests
res = requests.get('http://google.com')
print(res.url)
res = requests.get('http://stackoverflow.com')
print(res.url)
上面的輸出是
http://www.google.com/
https://stackoverflow.com/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/414632.html
標籤:
