2016-08-03 10 views
-1

APIクライアントは、multipart/form-dataおよびapplication/x-www-form-urlencoded形式のみをサポートしています。私は彼らのAPIアクセスしようとするので、:Pythonでリクエストモジュールを使用してmultipart/form-dataまたはapplication/x-www-form-urlencodedリクエストを処理する方法は?

import requests 
import json 

url = "http://api.client.com/admin/offer" 
headers = {"Content-Type": "multipart/form-data", "API-Key": "ffffffffffffffffffffffffffffffffffffffff"} 
data = {"Content-Type": "multipart/form-data", "title": "Demo offer", "advertiser": "f4a89a7h1aq", "url": "http://demo.com/", "url_preview": "http://demo.com/", "description": "Bla bla bla", "freshness": "fresh", "total": "2.0", "revenue": "1.8"} 
r = requests.post(url, headers=headers, data=json.dumps(data)) 

print r.text 

を私はこれを取得:

{"status":2,"error":"Submitted wrong data. Check Content-Type header"} 

この問題を克服するためにどのように?

ありがとうございます!

答えて

2

当社のAPIクライアントはまだあなたがmultipart/form-dataないapplication/jsonからContent-typeヘッダを、設定されている唯一のマルチパート/フォームデータおよび アプリケーション/ x-www-form-urlencoded形式

をサポートでもapplication/x-www-form-urlencoded

HTTPリクエストの本文にコンテンツタイプを設定しても、役に立ちません。

サーバーがJSONをサポートしていないようです。あなたは、このような標準形式としてデータを投稿してみてください:

import requests 
import json 

url = "http://api.client.com/admin/offer" 
headers = {"API-Key": "ffffffffffffffffffffffffffffffffffffffff"} 
data = {"title": "Demo offer", "advertiser": "f4a89a7h1aq", "url": "http://demo.com/", "url_preview": "http://demo.com/", "description": "Bla bla bla", "freshness": "fresh", "total": "2.0", "revenue": "1.8"} 
r = requests.post(url, headers=headers, data=data) 

print r.text 

デフォルトrequests.postでは、要求のボディにデータをapplication/x-www-form-urlencodedにContent-Typeヘッダーを設定し、します「でurlencode」。これは、サーバがapplication/x-www-form-urlencodedをサポートしていると述べているために有効です。

+0

私は自分のコードからjson.dumps()を削除していないことに気付きました。問題はそのことでした:-) – paus

関連する問題