2016-03-22 15 views
0

さまざまなヘッダーと括弧付きフォームデータを持つ リクエストをシミュレートしようとしています。フォームデータを使用したPOST要求

フォームデータ:

import requests 
reqUrl = 'http://website.com/login' 
postHeaders = { 
    'Accept': '*/*', 
    'Accept-Encoding': 'gzip,deflate', 
    'Accept-Language': 'en-US,en;q=0.8', 
    'Connection': 'keep-alive', 
    'Content-Length': '68', 
    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 
    'Host': 'website.com', 
    'Origin': 'http://www.website.com', 
    'Referer': 'http://www.website.com/', 
    'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/37.0.2062.120 Chrome/37.0.2062.120 Safari/537.36' 
} 

payload = {"username": "MY_USERNAME", 
    "pass": "MY_PASS", 
    "AUTO": "true" 
} 

session = requests.Session() 
response = session.post(reqUrl, data=payload, headers=postHeaders) 

は私が応答を受信して​​います:

クローム のコンソールに示すフォームデータである
{"username": "MY_USERNAME", "pass": "MY_PASS", "AUTO": "true"} 

だから私は、Pythonのrequestsライブラリと一緒にそれを入れてみましたそれは示す:

{"status":"failure","error":"Invalid request data"} 

私は行くフォームデータの間違った実装について私はまた、Content-Lengthを変更する必要があると考えていましたか?

答えて

1

はい、コンテンツの長さを設定しています.requestsが設定されている可能性があります。あまりにも多くのヘッダーを設定している場合は、代わりにライブラリのほとんどをそのままライブラリに残してください。

postHeaders = { 
    'Accept-Language': 'en-US,en;q=0.8', 
    'Origin': 'http://www.website.com', 
    'Referer': 'http://www.website.com/', 
    'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/37.0.2062.120 Chrome/37.0.2062.120 Safari/537.36' 
} 

が豊富です。他のすべてはあなたのために生成されます。

しかし、フォームデータの説明から、代わりにJSONを投稿しているようです。その場合には、JSONにあなたのペイロードをエンコードし、application/jsonContent-Typeヘッダーを設定します代わりにdatajsonキーワード引数を、使用します。

response = session.post(reqUrl, json=payload, headers=postHeaders) 
+0

すぎて先に自分の手に入れました。投稿されたヘッダーに変更されましたが、同じエラーが表示されています。 –

+0

@ ZacharyWeeden:Chromeに実際に投稿されているものを3回確認します。そこに他のヘッダー(おそらく署名データなど)がある場合は3回確認してください。そして、JSONを送信していないことは確かですか? –

+0

@ ZacharyWeeden:また、HTTPステータスコードは何ですか? –

関連する問題