如果您打印您收到的回覆文本,您會看到他們向您發送錯誤信息,表示您不接受Cookie。
當你這樣做的時候 - 總是試着儘可能地模擬瀏覽器 - 這意味着你必須設置所有的頭文件,並且執行瀏覽器的步驟。
所以首先在瀏覽器中打開網頁。打開開發工具,網絡選項卡。 現在點擊登錄 - >你看到瀏覽器向/ secure/proxy請求 所以你的程序也必須這樣做。比實際的要求。確保您的請求看起來像瀏覽器的請求 - 檢查標題。你可以看到他們在那裏發送令牌。 (順便說一句,他們不會像你在腳本中那樣在發佈數據中發送它)。他們也可能檢查其他標題,因爲當你刪除它們時 - 它不起作用。所以最簡單的方法是將所有標題作爲瀏覽器。
不要忘了餅乾。但是這是自動完成的,因爲您正在使用來自請求的會話。
反正這是工作代碼:
import requests
post_url = 'https://www.custommade.com/secure/login/api/'
client = requests.session()
client.get('https://www.custommade.com/')
r = client.get('https://www.custommade.com/secure/proxy/')
csrftoken = r.cookies['csrftoken']
header_info = {
"Host" : "www.custommade.com",
"Connection" : " keep-alive",
"Origin" : " https://www.custommade.com",
"User-Agent" : " Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36",
"Content-Type" : " application/x-www-form-urlencoded",
"Accept" : " */*",
"X-Requested-With" : " XMLHttpRequest",
"X-CSRFToken" : csrftoken,
"DNT" : " 1",
"Referer" : " https://www.custommade.com/secure/proxy/",
"Accept-Encoding" : " gzip, deflate, br",
"Accept-Language" : " en-US,en;q=0.8,cs-CZ;q=0.6,cs;q=0.4,sk;q=0.2,ru;q=0.2",
}
payload = {'_method':'login','email': '[email protected]','password':'asfdasf', 'remember':True}
r = client.post(post_url, data=payload, headers = header_info)
print r.text
print r.status_code
打印:
{"errors": "Oops! Something went wrong. Please ensure you are sending JSON data."}
400
^^指密碼錯誤