采用request与flask进行接口互动时需要关注传输的数据的大小和格式
简单的参数传输可以使用requests.get的方式
param = {'imageAurl': r'https://api.yiqidraft.com/group1/M00/00/08/CgBmk2JiuI6AY449AAp1nAL2I2U87.webp',
'imageBurl': r'https://api.yiqidraft.com/group1/M00/00/08/CgBmk2JitGCAHjdaAAGSxs8mPAo05.webp'}
response = requests.get('http://10.0.102.140:5033/predict', params=param, timeout=60)
我们可以通过如下方式接收参数
A_url = request.args.get('imageAurl')
B_url = request.args.get('imageBurl')
但是当传输的字符串大于8000的时候,采用request.get的方式无法支持了,会产生url字符串大小限制的报错
采用数据流传输,我们必须使用post的方式,例如我们将一张图片转换成base64的格式进行传输
data_path = '/home/ps/board_count/20230711175122079749jmxq_crop.jpg'
image = cv2.imread(data_path)
image = cv2.imencode('.jpg', image)[1]
image_code = str(base64.b64encode(image), 'utf-8')
param = {'img': image_code}
response = requests.post('http://10.0.102.140:5034/count_corrugated', data=param, timeout=60)
可以通过如下方式接收
img = request.form.get('img')
image_data = base64.b64decode(img)
img_io = io.BytesIO(image_data)
通过采用文件流传输的方式,我们可以在传输后在读取,传输大文件时更加的快速
data_path = '/home/ps/board_count/20230711175122079749jmxq_crop.jpg'
files = {'files': open(data_path, 'rb')}
response = requests.post('http://10.0.102.140:5035', files=files, timeout=60)
可以采用如下方式进行接收
body = request.files['files']
#io_stream = io.BytesIO(body.read()) # open对象直接为io对象,可以直接用Image.open读取
img = Image.open(body)