• 必看!!!客户端requests与服务端request收发请求


    当使用代码进行接口访问的时候,请求的发送与请求的接受使用的参数应该怎么如何传输能够请求到正确的响应呢?

    一、使用GET请求发送,客户端与服务端的参数传输与接受。

    1、服务端,首先使用web框架写一个简单的接口,接收两个参数,page和size,这也是分页参数,返回数据:状态码、信息、参数值。

    1. @bp.route('/translation/', methods=['GET'])
    2. def translation():
    3. args = request.args
    4. page = args.get('page')
    5. size = args.get('size')
    6. response = {'status' : 200,'message' : '返回的参数',
    7. 'size': size,'page': page
    8. }
    9. print(response)
    10. return Response(json.dumps(response))

     服务端接收到的数据

     2、客户端或者请求端是怎么发送的请求的,使用requests库进行模拟发送。urlencode 方法是用来对url进行编码的可以将字典,编译成page=1&size=50格式

    1. import requests
    2. import json
    3. from urllib.parse import urlencode
    4. def translation():
    5. params = {
    6. 'page': 1,
    7. 'size':50
    8. }
    9. param_encode = urlencode(params)
    10. url = 'http://127.0.0.1:5000/auth/translation' + '?' + param_encode
    11. response = requests.get(url=url)
    12. print(json.loads(response.text))

    客户端接受数据:

    二、POST请求发送,客户端与服务端的参数传输与接收

    使用post发送请求一半有两种方式,一种是使用form-data格式,我们就前端代码的form标签。一种是json格式,因为requests库的post方法有data与json两个参数,web框架的request,也是两个参数,request.form, request.json。

    1、使用json格式来进行传送参数,定义接收参数,username,password,返回数据:状态码,信息,与参数值

    1. @bp.route('/translation/', methods=['POST'])
    2. def translation():
    3. username = request.json.get('username')
    4. password = request.json.get('password')
    5. response = {'status': 200, 'message': '返回的参数',
    6. 'username': username, 'password': password
    7. }
    8. print(response)
    9. return Response(json.dumps(response))

    服务端接收数据:

     2、客户端使用requests.post 方法,在浏览器请求的使用一般使用的参数名称是payload。json可以直接使用字典,也可以使用字符串。前端传参一般是ajax方法

    1. import requests
    2. import json
    3. def translation():
    4. json_data = {
    5. 'username': '张三',
    6. 'password':'123456'
    7. }
    8. url = 'http://127.0.0.1:5000/auth/translation/'
    9. response = requests.post(url=url, json=json_data)
    10. print(json.loads(response.text))

    客户端接收数据:

     3、使用form-data格式来进行传参定义接收参数,username,password,返回数据:状态码,信息,与参数值

    1. @bp.route('/translation/', methods=['POST'])
    2. def translation():
    3. username = request.form.get('username')
    4. password = request.form.get('password')
    5. response = {'status': 200, 'message': '返回的参数',
    6. 'username': username, 'password': password
    7. }
    8. print(response)
    9. return Response(json.dumps(response))

    服务端接收数据:

     4、客户端使用requests.post 方法使用data参数,一般是字典格式,前端一般使用form > input标签,postman,也是使用参数+值的方法

    1. import requests
    2. import json
    3. def translation():
    4. form_data = {
    5. 'username': '张三',
    6. 'password':'123456'
    7. }
    8. url = 'http://127.0.0.1:5000/auth/translation/'
    9. response = requests.post(url=url, data=form_data)
    10. print(json.loads(response.text))

    客户端接受数据:

    总结:使用form-data 与json 传输的方法很相似,但是要把参数data=与json= 做为修改,服务端的接受也只是request.form 与request.json的变更而已。

    注意点:request.from与request.json 不能够同时接收参数,不能够同时存在。不然会报错,服务端会出现400的错误,客户端会出现400 Bad Request

    客户端出错:



    400 Bad Request

    Bad Request


    Failed to decode JSON object: None

    服务端出错:

    127.0.0.1 - - [24/Nov/2022 15:02:06] "POST /auth/translation/ HTTP/1.1" 400 -

    Xmind 思维导图:

  • 相关阅读:
    C++的使用
    爱上开源之golang入门至实战第四章函数(Func)(七)
    你的英语目前处在什么样的水平?
    前端页面左右布局,点击左div增加动画过渡效果
    【区块链 | Compound】4.剖析DeFi借贷产品之Compound:清算篇
    Python语言第五章之字符串
    Spring体系结构详解
    Qt之xml文件解析
    odoo--qweb模板介绍(一)
    集合的练习题
  • 原文地址:https://blog.csdn.net/qq_42336581/article/details/127090685