flask使用request进行数据传输的一些方式

引言

采用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)

你可能感兴趣的:(flask,python)