2016-12-02 32 views
-1

私はPythonリクエストを使用してhttps://www.custommade.com/にログインしようとしていましたが、 "403禁止されたエラー"を表示し続けます。私はhttp_foxからペイロードのpost_urlと内容を取得しました投稿要求が403で失敗しました。禁止

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

返信テキストを印刷すると、クッキーを受け入れていないというエラーが表示されます。

このようなことをしているときは、常にブラウザを可能な限り最高にシミュレートしようとします。つまり、すべてのヘッダーを設定し、ブラウザが実行する手順を実行する必要があります。

まずブラウザでウェブページを開きます。開発ツール、ネットワークタブを開きます。 ログインをクリックすると、ブラウザが/ 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 

は^^パスワードが

間違っていることを意味
関連する問題