3
我試圖登錄到使用下面的代碼使用Python中urllib
網站的urllib:登錄網站使用,而不是http.client
import urllib.parse
import urllib.request
headers = {"Content-type": "application/x-www-form-urlencoded"}
payload = urllib.parse.urlencode({"username": "USERNAME-HERE",
"password": "PASSWORD-HERE",
"redirect": "index.php",
"sid": "",
"login": "Login"}).encode("utf-8")
request = urllib.request.Request("https://osu.ppy.sh/forum/ucp.php?mode=login", payload, headers)
response = urllib.request.urlopen(request)
data = response.read()
# print the HTML after the request
print(bytes(str(data), "utf-8").decode("unicode_escape"))
我知道,一個共同的建議是隻使用請求庫,並且我嘗試了這一點,但我特別想知道如何在不使用請求的情況下執行此操作。
我正在尋找可以用下面的代碼,成功登錄到使用http.client
站點複製行爲:
import urllib.parse
import http.client
headers = {"Content-type": "application/x-www-form-urlencoded"}
payload = urllib.parse.urlencode({"username": "USERNAME-HERE",
"password": "PASSWORD-HERE",
"redirect": "index.php",
"sid": "",
"login": "Login"})
conn = http.client.HTTPSConnection("osu.ppy.sh")
conn.request("POST", "/forum/ucp.php?mode=login", payload, headers)
response = conn.getresponse()
data = response.read()
# print the HTML after the request
print(bytes(str(data), "utf-8").decode("unicode_escape"))
在我看來,該urllib
代碼不是「提供」的有效載荷,而http.client
代碼是。
我似乎能夠「傳遞」有效載荷,因爲提供了錯誤的密碼,並且用戶名可以保證來自服務器的響應,但是提供正確的用戶名和密碼似乎沒有效果。
任何見解?我可以忽略一些東西嗎
我想你的代碼運行,我得到預期的結果(您指定的密碼不正確...) 。這意味着有效載荷已交付。如果填寫正確的用戶名/密碼,你會得到什麼迴應? – Qeek
@Qeek我也看到你提到的行爲,但是當給出正確的用戶名和密碼時,該網站仍然表現得像我還沒有登錄(「Welcome,guest!」而不是「Welcome,!」)。也許在初始有效載荷交付後登錄不會持久?我需要使用Cookie嗎? –