折腾:
【已解决】Flask的REST API添加支持POST时body中分块传输二进制数据
期间,需要去测试REST的POST中发送
Transfer-Encoding: chunked
的二进制数据
先去看看之前强大的Postman:
postman post Transfer-Encoding chunked
好像不支持?
HTTP Parse Error when POST request has `Transfer-Encoding: chunked` · Issue #1492 · puma/puma
IBM Knowledge Center – Using chunked transfer-coding to send an HTTP request or response
spring – HttpServletRequest Transfer Encoding Lost – Stack Overflow
不过或许好像可以:
header中设置:
Transfer-Encoding: chunked
然后body中直接选择文件,作为二进制数据发送?
去试试:
然后本地运行Flask,去测试是否正常发送了二进制数据。
<code> File "/Users/crifan/dev/xxx/app.py", line 828, in post speechData = requests.get_data() AttributeError: module 'requests' has no attribute 'get_data' 127.0.0.1 - - [04/Jul/2018 13:58:08] "POST /asr/language/en-US HTTP/1.1" 500 - </code>
此处搞错了:
此处用的requests是第三方库
改为:
request.get_data()
但是找不到:request
试试:
<code>from flask import request speechData = request.get_data() </code>
结果就可以了。
【总结】
最终用:
<code>class RobotAsrAPI(Resource): def post(self, language=settings.ASR_LANGUAGE_DEFAULT): log.info("RobotAsrAPI POST: language=%s", language) respDict = { "code": 200, "message": "parse speech ok", "data": { "speechText": "" } } # speechData = requests.get_data() speechData = request.get_data() if not speechData: respDict["message"] = "Can not get speech binary data!" return jsonify(respDict) speechDatLen = len(speechData) log.info("speechDatLen=%s", speechDatLen) # respDict["data"]["speechText"] = doASR(speechData) respDict["data"]["speechText"] = "parsed speech text" return jsonify(respDict) </code>
实现了想要的效果。
转载请注明:在路上 » 【已解决】REST工具支持POST发送Transfer-Encoding chunked的二进制数据