나는 다음과 같은 형식으로 내 서버에 오는 것입니다 JSON 데이터가 :이 유효한 JSON 형식이 아닌 내가 통제 할 수 없다는 것을 깨닫게하는 동안읽기 JSON 데이터 라인
{"line":"one"}
{"line":"two"}
{"line":"three"}
을 이 데이터가 어떻게 도달하고 있는지 데이터를 라인 단위로 읽을 수 있어야합니다.
이제는 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 데이터를 포함하고 여기에 POST 요청을 처리하는 기능입니다. cherrypy이 같은 \n
같은 라인 구분 기호를 무시 몸을 읽을 때 것처럼 보인다
{"line":"one"}{"line":"two"}{"line":"three"}
: 나는 200 응답은, 그러나, 파일에서 읽은 모든 데이터가 한 줄 아래처럼에 얻을. cherrypy가 포맷 된대로 요청 본문을 읽게하려면 어떻게해야합니까? 또는 더 구체적으로 요청 본문을 한 번에 한 줄씩 읽지 않고 한 번에 모두 읽을 수있는 방법은 무엇입니까?
'raw_body.count ('\ n')'같은 것을 파일에 쓸 때 어떻게됩니까? –
@MartijnPieters'f.write (str (raw_body.count ('\ n'))))''나는'0'을 추가합니다. 선의 끝에 \ n을 명시 적으로 추가하더라도 여전히'0'을 얻습니다. cherrpy가 사전 처리 작업을하기 전에 할 수 있습니까? –
즉'raw_body'는 개행 문자가 없으므로'.splitlines()'는 목록에서 변경되지 않은 raw_body를 반환하고, 한 줄로 파일에 출력합니다. 'curl'이'\ n' 개행 문자로 데이터를 보내는 것을 100 % 확실합니까? –