【Python Flask/postman:request中post的header:Content-type=“text/plain”报错及解决方法】
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
项目场景
python Flask构建restful API接口服务通过postman进行接口服务验证测试
问题描述及解决方法
提示这里描述项目中遇到的问题
验证接口调用text/plain时出现报错
源代码错误
from flask import Flask,url_for,request,json
app = Flask(__name__)
@app.route("/message",methods=['POST'])
def api_message():
if request.headers['Content-Type'] =='text/plain':
return "Text message:" + request.data()#报错1TypeError: 'bytes' object is not callable
elif request.headers['Content-Type'] == 'application/json':
return "Json message: " + json.dumps(request.json)
elif request.headers['Content-Type'] == 'application/octet-stream':
f= open("./binary",'wb')
f.write(request.data)
f.close()
return("Binary message written!")
else:
return("415 Unsupported Media Type!")
}
if __name__ == "__main__":
app.run()
报错1 TypeError: ‘bytes’ object is not callable
报错1原因 类中函数名或者变量名重用即变量名和函数名有重复
根据报错1的原因进行修改
return "Text message:" + request.data()#报错1TypeError: 'bytes' object is not callable
修改成
return "Text message:" + request.data
但验证接口调用text/plain时还是报错
报错2 TypeError: can only concatenate str (not “bytes”) to str
报错2原因 两边字符的格式不一致导致不能用“+”进行拼接
根据报错2的原因进行修改
return "Text message:" + request.data#报错2TypeError: can only concatenate str (not "bytes") to str
修改成
return "Text message:" + str(request.data)
修改完成后接口调用text/plain时不报错也可以获取request中txt格式的流数据但是输入123本该正常输出Text message:123却输出Text message:b’123’
异常解决方法 使用bytes类型中的decode()方法decode()方法完成从比特流向字符串解码的过程
根据异常解决方法进行修改
return "Text message:" + str(request.data)
修改成
return "Text message:" + request.data.decode('utf-8')
源代码正确
from flask import Flask,url_for,request,json
app = Flask(__name__)
@app.route("/message",methods=['POST'])
def api_message():
if request.headers['Content-Type'] =='text/plain':
return "Text message:" + request.data.decode('utf-8')
elif request.headers['Content-Type'] == 'application/json':
return "Json message: " + json.dumps(request.json)
elif request.headers['Content-Type'] == 'application/octet-stream':
f= open("./binary",'wb')
f.write(request.data)
f.close()
return("Binary message written!")
else:
return("415 Unsupported Media Type!")
}
if __name__ == "__main__":
app.run()
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |