2016-12-02 192 views
-1

我試圖使用python-requests登錄https://www.custommade.com/,但它一直給我一個「403禁止的錯誤」。我得到了httpfox的post_url和有效載荷內容Python-請求發佈請求失敗,發生在403 Forbidden

import requests 

post_url = 'https://www.custommade.com/secure/login/api/' 

client = requests.session() 

csrftoken = client.get('https://www.custommade.com/').cookies['csrftoken'] 

header_info = { 
    'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36', 
    'Content-type': 'application/json' 
    } 

payload = {'_method':'login','csrftoken': csrftoken,'email': MYEMAIL,'password':MYPWS} 

r = client.post(post_url, json=payload, headers = header_info) 

print r.status_code 

有人可以幫忙嗎?我試圖登錄其他網站,這工作正常。

回答

1

如果您打印您收到的回覆文本,您會看到他們向您發送錯誤信息,表示您不接受Cookie。

當你這樣做的時候 - 總是試着儘可能地模擬瀏覽器 - 這意味着你必須設置所有的頭文件,並且執行瀏覽器的步驟。

所以首先在瀏覽器中打開網頁。打開開發工具,網絡選項卡。 現在點擊登錄 - >你看到瀏覽器向/ secure/proxy請求 所以你的程序也必須這樣做。比實際的要求。確保您的請求看起來像瀏覽器的請求 - 檢查標題。你可以看到他們在那裏發送令牌。 (順便說一句,他們不會像你在腳本中那樣在發佈數據中發送它)。他們也可能檢查其他標題,因爲當你刪除它們時 - 它不起作用。所以最簡單的方法是將所有標題作爲瀏覽器。

不要忘了餅乾。但是這是自動完成的,因爲您正在使用來自請求的會話。

enter image description here

反正這是工作代碼:

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 

^^指密碼錯誤