POST bottle.py
を使用したリクエストの読み取りに問題があります。
送信されたリクエストの本文にはテキストが含まれています。 29行目でその方法を確認できます。 https://github.com/kinetica/tries-on.js/blob/master/lib/game.js 。
node
ベースのクライアントでの読み取り方法も、4行目で確認できます https://github.com/kinetica/tries-on.js/blob/master/masterClient.js 。
ただし、私はbottle.py
ベースのクライアントでこの動作を模倣することができませんでした。 docs は、ファイルのようなオブジェクトで未加工の本文を読み取ることができると言いますが、request.body
でforループを使用することも、request.body
のreadlines
メソッドを使用することもできません。
@route('/', method='POST')
で修飾された関数でリクエストを処理していますが、リクエストは正しく到着します。
前もって感謝します。
編集:
完全なスクリプトは次のとおりです。
from bottle import route, run, request
@route('/', method='POST')
def index():
for l in request.body:
print l
print request.body.readlines()
run(Host='localhost', port=8080, debug=True)
シンプルなpostdata = request.body.read()
を試しましたか?
次の例は、投稿されたデータをrequest.body.read()
を使用してraw形式で読み取る方法を示しています。
また、ボディの生のコンテンツを(クライアントではなく)ログファイルに出力します。
フォームプロパティへのアクセスを示すために、クライアントに「名前」と「姓」を返すことを追加しました。
テストでは、コマンドラインからcurlクライアントを使用しました。
$ curl -X POST -F name=jan -F surname=vlcinsky http://localhost:8080
私のために働くコード:
from bottle import run, request, post
@post('/')
def index():
postdata = request.body.read()
print postdata #this goes to log file only, not to client
name = request.forms.get("name")
surname = request.forms.get("surname")
return "Hi {name} {surname}".format(name=name, surname=surname)
run(Host='localhost', port=8080, debug=True)
POSTされたデータを処理するための単純なスクリプト。 POSTされたデータは端末に書き込まれ、クライアントに返されます。
from bottle import get, post, run, request
import sys
@get('/api')
def hello():
return "This is api page for processing POSTed messages"
@post('/api')
def api():
print(request.body.getvalue().decode('utf-8'), file=sys.stdout)
return request.body
run(Host='localhost', port=8080, debug=True)
上記のスクリプトにJSONデータをPOSTするためのスクリプト:
import requests
payload = "{\"name\":\"John\",\"age\":30,\"cars\":[ \"Ford\", \"BMW\",\"Fiat\"]}"
url = "localhost:8080/api"
headers = {
'content-type': "application/json",
'cache-control': "no-cache"
}
response = requests.request("POST", url, data=payload, headers=headers)
print(response.text)