2016-10-25 9 views
0

Python 3のリクエストを使用してWebサイトにログインしようとしています。 残念ながら私はそれを行うことができません。要求のあるPythonのポストメソッド

これは私がログイン要求から取得した情報です:

レスポンスヘッダ:

Cache-Control:no-cache 
Connection:close 
Content-Encoding:gzip 
Content-Type:application/json 

リクエストヘッダ:

Accept:application/json, text/plain, */* 
Content-Type:application/json;charset=UTF-8 
Referer:fffff 

要求ペイロード:

{email: "xxx", password: "yyy", _token: "zzz"} 

私のコード:

with requests.Session() as x: 
    url = 'website' 
    USERNAME = "xxx" 
    PASSWORD = "yyy" 
    token = "zzz" 
    x.get(url) 
    x.post(url, data={'email': USERNAME, 'password': PASSWORD, '_token':token}, 
      headers={'Referer':"fffff"}) 
    page = x.get("some_page_I_have_access_after_login") 
    print(page.content) 

最後の「印刷」の結果だけでは

「に....ログインしてください」で、あなたはそれで私を助けてくださいことはできますか?

編集:

私はへの変更コードがあります。今、私は明確なステータスを持つ

url = 'url' 
USERNAME = "xxx" 
PASSWORD = "yyy" 
token = "fff" 
headers = {'Content-type': 'application/json', 'Accept': 'text/plain', 'Referer':'cccc'} 
data = {'email': USERNAME, 'password': PASSWORD, '_token':token} 
x = requests.get(url) 
w = requests.post(url, data=data, headers=headers) 
print(w.status_code) 
page = requests.get("some_url_I_want_access") 
page.raise_for_status() 

を。 私はステータス200を持っています。 ユーザ名を変更してもまだ200になっているため、ログインできないという問題があります。

ページ: 401クライアントエラー:URLの無断: "some_url_I_want_access"

+0

は、あなたはJSONを使用して資格情報を送信することができますか?通常、フォームエンコードで送信されます。 – Andrey

+0

わかりませんが、変わったのは、x.post(....)行をw = x.post(...)に変更し、次の行にline print(w.content)を追加したことです。私はmy_pageのhtmlを取得しているので、ログインしているようです。残念ながら、最後の "print"ステートメントでも同じエラーが表示されます。 – Maciejjy

+0

私はプログラムを作った。私は間違いがどこにあるか知っていると思う。私のプログラムを実行すると、リクエストボディは次のようになります:email = aaa%40ccc.com&_token = xxx&password = yyyしかし、私は作業中のブラウザ要求を入力すると、リクエストボディは{"email": "[email protected]"、 "password" : "yyy"、 "_ token": "xxx"}これはまったく同じではなく、作業要求からこの行をコピー&ペーストしてWebデバッガに貼り付けると、Pythonからの私の要求が機能します。この行全体をPythonの適切な方法で書くだけでいいです。それは私にとっては難しいかもしれません。 – Maciejjy

答えて

0

はこれを試してみてください:

import json 
w = requests.post(url, data=json.dumps(data), headers=headers) 
+0

正確に。それが問題でした。私はいくつかのドキュメントの助けを借りてこれを解決することができますが、あなたのお手伝いをしてくれてありがとうございます。 – Maciejjy