Flask get &post请求
- 一、环境描述
- 二、初始化flask 程序
- 三、get请求
- 3.1 代码
- 3.2 分析
- 3.3 验证
- 3.4 请求结果
 
- 四、post请求
- 4.1 代码
- 4.2 分析
- 4.3 验证
- 4.3.1 postman 请求头application/json参数
- 4.3.2 postman 请求头application/x-www-form-urlencoded参数
- 4.3.3 postman 请求头multipart/form-data参数
- 4.3.4 request.get_data()解析参数
 
 
- 五、总结
- 六、遗留问题
一、环境描述
python:3.8.0
 flask: 2.3.2
 postman:9.12.2
Flask delete&put请求传送门:FLASK DELETE&PUT
二、初始化flask 程序
from flask import Flask, request
app = Flask(__name__)
@app.route('/')
def hello_world():  # put application's code here
    return 'Hello World!'
    
if __name__ == '__main__':
    app.run(host="0.0.0.0", debug=True)
- 0.0.0.0: 由于我使用的是 虚拟机,所以指定同一局域网中可反问
- debug:开启debug模式,修改程序后会自动部署,无需重启程序
三、get请求
3.1 代码
from flask import Flask, request
app = Flask(__name__)
@app.route('/')
def hello_world():  # put application's code here
    return 'Hello World!'
# get 获取请求参数
@app.route('/user', methods=['GET'])
def get_user_info():
    # user_name = request.args.get('user_name')
    user_name = request.values.get("user_name")
    # 将数据再次打包为 JSON 并传回
    res = {"user_name": user_name}
    return res
if __name__ == '__main__':
    app.run(host="0.0.0.0", debug=True)
3.2 分析
-  请求举例:http://ip:5000/user?user_name=neil 
-  限定请求只响应路径为 /user时的get请求@app.route('/user', methods=['GET']) def method(): ...- 使用/user限制请求响应的路径
- 使用methods进行请求方式限定
 
- 使用
-  获取参数的方式 # 获取get ?后参数的方法 request.args.get('user_name') request.values.get('user_name')
3.3 验证
-  postman 请求参数 
  
-  postman header 如下(使用默认) 
  
3.4 请求结果

四、post请求
4.1 代码
from flask import Flask, request
app = Flask(__name__)
@app.route('/')
def hello_world():  # put application's code here
    return 'Hello World!'
# post 获取请求参数
@app.route('/user', methods=['POST'])
def post_user_info():
    # postman 使用默认请求头application/json
    user_info = request.get_json()
    res = {"user_name": user_info.get("user_name")}
    # postman 使用application/x-www-form-urlencoded请求 
    # 注:此测试得也可解析multipart/form-data请求
    # user_name = request.values.get('user_name')
    # res = {"user_name": user_name}
    # postman 使用multipart/form-data请求
    # 注:此测试得也可解析application/x-www-form-urlencoded请求
    # user_name = request.form.get('user_name')
    # user_name = request.form['user_name']
    # res = {"user_name": user_name}
    
    # postman 使用上述三种都可以收到内容,但是返回值为bytes类型
    # user_info = request.get_data()
    # res = {"user_name": user_info.decode("utf-8")}
    return res
if __name__ == '__main__':
    app.run(host="0.0.0.0", debug=True)
4.2 分析
-  请求举例:http://ip:5000/user 
-  限定请求只响应路径为 /user时的post请求@app.route('/user', methods=['POST']) def method(): ...- 使用/user限制请求响应的路径
- 使用methods进行请求方式限定
 
- 使用
-  获取参数的方式有四种 - request.get_json():可解析 请求头application/json的参数
- request.values.get('user_name'): 可解析请求头为application/x-www-form-urlencoded & multipart/form-data的参数
- request.form.get('user_name')&request.form['user_name']: 可解析请求头为multipart/form-data &application/x-www-form-urlencoded的参数
- request.get\_data():怎样的请求都可以拿到参数,但是默认初始解析返回值是- bytes的对象
 
4.3 验证
4.3.1 postman 请求头application/json参数
-  设置参数 
  
-  header内容 
  
-  请求结果 
  
4.3.2 postman 请求头application/x-www-form-urlencoded参数
-  设置参数 
  
-  header内容 
  
-  请求结果 
  
4.3.3 postman 请求头multipart/form-data参数
- 设置参数
  
- header内容
  
- 请求结果
  
4.3.4 request.get_data()解析参数
- 请求multipart/form-data请求头内容
  
- 请求 application/x-www-form-urlencoded请求头内容
  
- 请求application/json请求头内容
  
五、总结
-  get请求GET把参数包含在URL中,访问时会在地址栏直接显示参数不安全,且参数大小比较小
-  post请求参数通过 request body传递,请求头的情况下需要不同的解析方式进行相关处理
六、遗留问题
- 为什么application/x-www-form-urlencoded & multipart/form-data 请求头可以相互解析相关参数? 
  - x-www-form-urlencoded,表单默认的 Content-type 类型,支持 ASCII-text 文本内容
- multipart/form-data,允许提交表单包含: files,non-ASCII-text,Binary 类型数据
- 参考:https://learning.postman.com/docs/sending-requests/requests/
 





![[CrackMe]Chafe.1.exe的逆向及注册机编写](https://img-blog.csdnimg.cn/4d924057769f4c8482e86e7cc875569d.png)













