次の形式でサーバーに送信されるjsonデータがあります。
{"line":"one"}
{"line":"two"}
{"line":"three"}
これは有効なjson形式ではないことはわかっていますが、このデータがどのように届くかを制御することはできません。データを1行ずつ読み取ることができる必要があります
これで、POSTリクエストを受け入れるための非常にシンプルなCherrypyサーバーのセットアップができました。POSTリクエストを処理する関数は次のとおりです。
class PostEvent(object):
exposed = True
def POST(self, **urlParams):
cl = cherrypy.request.headers['Content-Length']
raw_body = cherrypy.request.body.read(int(cl))
lines = raw_body.splitlines()
with open('log.txt', 'w') as f:
for line in lines:
f.write('%s\n' % line)
次に、次のcurl
コマンドを発行してテストします。
curl -i -k -H "Content-Type: application/json" -H "Accept: application/json" -X POST --data @test_data -u username http://test-url.com
ファイルtest_data
に上記の形式のjsonデータが含まれている場合。200の応答がありますが、ファイルから読み取られたすべてのデータは、次のように1行になっています。
{"line":"one"}{"line":"two"}{"line":"three"}
Cherrypyが本文を読み取っているときは、などの行区切り文字を無視しているように見え\n
ます。フォーマットされたリクエスト本文をcherrypyに読み取らせるにはどうすればよいですか?または、より具体的には、リクエストの本文を一度にではなく1行ずつ読み取るにはどうすればよいですか?