【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
标签: python