系统的介绍Request使用方式有些复杂,下面集中我最常用的情况,可以让你快速了解request.post常见用法
headers={'content-type': 'application/json;charset=UTF-8'}
header = {'content-type': 'application/json', 'authorization': 'serial_num'}
files = {‘file’: open('test.png','rb')}
#自定义文件名,文件类型、请求头
files = {'oriImg': ('test.png',open('test.png','rb'),'image/png'))}
response = requests.post(url, files=files, headers=header,timeout=3)
response = requests.post(url, data=str(send_data).encode('utf-8'), headers=header,timeout=4)
1、服务端通常是根据请求头(headers)中的 (Content-Type )字段来获知请求中的消息主体是用何种方式编码,再对主体进行解析。‘content-type’: ‘application/json’告诉服务端消息主体是序列化后的 JSON 字符串。我一般在python中都这么用。
2、服务端通常是根据请求头(headers)中的(authorization)主要用作http协议的认证.
3、timeout=3,这个值是作为 connect 和 read 二者共用的 timeout ,可以写成timeout=(4,3)内第一个值为连接超时时间,第二个值为读取超时时间.
4、传送数据内容可以是file,json,data,file注释里面已经写明用法了,下面介绍一下json和data
data与json既可以是str类型,也可以是dict类型。
4.1、不管json是str还是dict,如果不指定headers中的content-type,默认为application/json
4.2、data为dict时,如果不指定content-type,默认为application/x-www-form-urlencoded,相当于普通form表单提交的形式
4.3、data为str时,如果不指定content-type,默认为text/plain
4.4、用data参数提交数据时,request.body的内容则为a=1&b=2的这种形式,用json参数提交数据时,request.body的内容则为’{“a”: 1, “b”: 2}'的这种形式
这些是网上的解释,我一般使用都是data=str(send_data).encode(‘utf-8’),data=字典转为字符串
client客户端代码
import requests
import json
senddata = {}
senddata['flag'] = 1
senddata['content'] = 'mm'
resp = requests.post("http://localhost:5000",data=str(senddata).encode('utf-8'), headers={'content-type': 'application/json'})
print(json.loads(resp.text)['result'])
server服务端代码
from flask import Flask, jsonify, request
import json
import sys
app = Flask(__name__)
#predict是对客户端的不同请求的命名,也可以是get_data,print,save等等
@app.route('/',methods = ['POST'])
def predict():
if request.method == 'POST':
data=request.data
print(data)
dict_res=eval(data.decode())
print(dict_res)
return jsonify({'result': ' GOT RESULT'})
if __name__ == '__main__':
app.run(host='127.0.0.1', port=5000)
client客户端代码发送form-data,注意这里有个特别重要的问题,
就是无论发送失败或者成功,文件缓存被清空,需要重新加载
import requests
import time
def send():
data={}
data['diameter'] = '28'
files = [
('originalImg', ('1.jpeg', open('1.jpeg', 'rb'), 'image/jpeg')),
('measureImg', ('2.jpeg', open('1.jpeg', 'rb'), 'image/jpeg'))
]
try:
url = 'http://127.0.0.1:5000'
print(data)
resp = requests.post(url, data=data, files=files)
#无论发送失败或者成功,文件缓存被清空,需要重新加载
# time.sleep(4)
# files = [
# ('originalImg', ('1.jpeg', open('1.jpeg', 'rb'), 'image/jpeg')),
# ('measureImg', ('2.jpeg', open('1.jpeg', 'rb'), 'image/jpeg'))
# ]
#resp = requests.post(url, data=data, files=files)
jsonResult = resp.json()
print(jsonResult)
except Exception as error:
print(error)
url = 'http://127.0.0.1:5008'
pass
send()
server服务端代码接收form-data
from flask import Flask, jsonify, request
import json
import sys
app = Flask(__name__)
#predict是对客户端的不同请求的命名,也可以是get_data,print,save等等
@app.route('/',methods = ['POST'])
# @app.route('/',methods = ['POST'])
def predict():
if request.method == 'POST':
data=request.form.get('diameter')
print(data)
file = request.files.get('measureImg')
file.save("file1.jpg")
print(file)
return jsonify({'result': ' GOT RESULT'})
if __name__ == '__main__':
app.run(host='127.0.0.1', port=5000)