web-dev-qa-db-ja.com

REST Python-Requestを使用した投稿

なぜこの単純なコードではないのですかPOSTサービスへのデータ:

import requests
import json

data = {"data" : "24.3"}
data_json = json.dumps(data)
response = requests.post(url, data=data_json)
print response.text

そして私のサービスはこのようにWCFを使用して開発されています:

  [OperationContract]
  [WebInvoke(Method = "POST", UriTemplate = "/test", ResponseFormat =    
      WebMessageFormat.Json,RequestFormat=WebMessageFormat.Json)]
  string test(string data );

注:入力パラメーターdataを削除すると、すべてが正常に機能し、何が問題になる可能性があります。

10
Suave Nti

コンテンツタイプヘッダーを設定する必要があります。

data = {"data" : "24.3"}
data_json = json.dumps(data)
headers = {'Content-type': 'application/json'}

response = requests.post(url, data=data_json, headers=headers)

urlhttp://httpbin.org/postに設定すると、そのサーバーは投稿された内容をエコーバックします。

>>> import json
>>> import requests
>>> import pprint
>>> url = 'http://httpbin.org/post'
>>> data = {"data" : "24.3"}
>>> data_json = json.dumps(data)
>>> headers = {'Content-type': 'application/json'}
>>> response = requests.post(url, data=data_json, headers=headers)
>>> pprint.pprint(response.json())
{u'args': {},
 u'data': u'{"data": "24.3"}',
 u'files': {},
 u'form': {},
 u'headers': {u'Accept': u'*/*',
              u'Accept-Encoding': u'gzip, deflate, compress',
              u'Connection': u'keep-alive',
              u'Content-Length': u'16',
              u'Content-Type': u'application/json',
              u'Host': u'httpbin.org',
              u'User-Agent': u'python-requests/1.0.3 CPython/2.6.8 Darwin/11.4.2'},
 u'json': {u'data': u'24.3'},
 u'Origin': u'109.247.40.35',
 u'url': u'http://httpbin.org/post'}
>>> pprint.pprint(response.json()['json'])
{u'data': u'24.3'}

requestsバージョン2.4.2以降を使用している場合は、JSONエンコーディングをライブラリに任せることができます。正しいContent-Typeヘッダーも自動的に設定されます。 JSONとして送信されるデータをjsonキーワード引数に渡します。

data = {"data" : "24.3"}
response = requests.post(url, json=data)
23
Martijn Pieters