暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

接口测试 | Day43 使用python+requests发送请求

走向易富强之路 2021-08-17
1261

背景说明:
1、为了防止三天打鱼两天晒网式学习
2、每日更新1-2个小知识点或者案例
3、只看和跟着做的理解程度是不一样的
4、建议一起打卡练习
5、互相督促打卡 + v:yifuqiang2021

Day43

目标:
  • requests安装
  • requests使用
  • JSON类型解析


一、requests安装
  • 安装命令
  • 官方文档

1)安装request命令:
    pip install requests
    复制

    2)requests官方文档
    参考:https://docs.python-requests.org/zh_CN/latest/index.html

    二、requests使用
    • get请求
    • 带参数的get请求
    • 传统表单类post请求(x-www-form-urlencoded)
    • JSON类型的POST请求(application/json)


    1)get请求
    发送一个请求分三步:
    1. 组装请求:请求包含:url,params(url参数),data(请求数据),header(请求头),cookie等
    2. 发送请求,获取响应:支持get,post等方法发送,返回的是一个响应对象
    3. 解析响应:输出响应文本
      -- 新建一个demo.py,发送一次请求
      # 导入requests库
      import requests
      # 1、组装请求
      url = "http://httpbin.org/get"
      # 2、发送请求,获取响应
      res = requests.get(url)
      # 3、解析响应
      print(res.text)
      复制
      运行结果:


      2)带参数的get请求
      • params(url参数:为字典格式,单独提出来是为了方便参数的添加修改等操作
        # 导入requests库
        import requests
        # 1、组装请求
        url = "http://httpbin.org/get"
        # 2、发送请求,获取响应
        payload = {'key1':'value1','key2':'value2'}
        res = requests.get(url,params=payload)
        # 3、解析响应
        print(res.text)
        复制
        运行结果:

        3)传统表单类post请求(x-www-form-urlencoded)
        • data:请求数据,为字典格式
          # 导入requests库
          import requests
          # 1、组装请求
          url = "http://httpbin.org/post"
          # 2、发送请求,获取响应
          data = {'key1':'value1','key2':'value2'}
          res = requests.post(url,data=data)
          # 3、解析响应
          print(res.text)
          复制
          运行结果:


          4)JSON类型的POST请求(application/json)
          • data参数支持字典格式也支持字符串格式
            • 字典格式,requests方法会将其按照默认表单urlencoded格式转换为字符串
            • 字符串,则不转化
          • data以字符串格式传输需要遵循以下几点
            • 必须是严格的JSON格式字符串,里面必须用双引号,k-v之间必须有逗号,布尔值必须是小写的true/false等等

            • 不能有中文,直接传字符串不会自动编码

          • 引号
            • 单行(注意外层有引号,为字符串):' '
            • 多行文本, 字符串格式:""" """
            # 导入requests库
            import requests
            import json
            # 1、组装请求
            url = "http://httpbin.org/post"
            # 2、发送请求,获取响应
            data = """{
            "key1":"value1",
            "key2":"value2"
            } """
            headers = {"Content-Type":"application/json"}
            res = requests.post(url=url,data=json.dumps(data),headers=headers)
            # 3、解析响应
            print(res.text)
            复制
            运行结果:

            三、JSON类型解析
            • 为什么要序列化
            • 什么是序列化
            • 对象在HTTP中的传输过程
            • JSON对象与Python字典的区别
            • JSON格式操作方法
            • 什么时候使用JSON对象(字典)什么时候使用JSON文本

            1)为什么要序列化?
            • 程序中的对象,如Python中的字典、列表、函数、类等,都是存在内存中的,一旦断电就会消失,不方便传递或存储
            • 所以需要将内存中的对象转化为文本或者文件格式,来满足传输和持久化(存储)需求

            2)什么是序列化
            • 序列化:内存对象 -> 文本/文件
            • 反序列化:文本 -> 内存对象

            3)对象在HTTP中的传输过程
            • HTTP协议是超文本传输协议,是通过文本或二进制进行传输的
            • 所以发送的请求要转化成文本进行传输
            • 收到的响应也是文本格式
            • 如果是JSON,一般还需要将文本格式重新转化为对象

            3.1)JSON对象(Python字典) -> 转为文本请求 -> 发送请求
            • 服务器收到文本请求 -> 将文本请求转化为对象,获取其中的参数,处理业务
            • 返回文本格式的响应 -> 客户端转为对象格式来从响应中取值

            4)JSON对象与Python字典的区别
            • JSON对象是javascript object即javascript中的对象,是一种通用的格式,格式严格,不支持备注
            • Python中一般提到JSON对象指的是字典

            4.1)JSON文本和JSON对象的区别:
            • JSON文本是符合JSON格式的文本,实际上是一个字符串
            • JSON对象是内存中一个对象,拥有属性和方法,可以通过对象获取其中的参数信息

            4.2)Python的字典的格式和JSON格式的区别:
            • 字典中的引号支持单引号和双引号,JSON格式只支持双引号
            • 字典中的True/False首字母大写,JSON格式为true/false
            • 字典中的空值为None, JSON格式为null

            5)JSON格式操作方法
            • 序列化(字典 -> 文本/文件句柄):json.dumps() json.dump()
            • 反序列化(文本/文件句柄 -> 字典) : json.loads() json.load()
            • 文件的序列化与反序列化

            5.1)序列化(字典 -> 文本/文件句柄):json.dumps()/json.dump()
              # 导入requests库
              import requests
              import json
              # 1、组装请求
              url = "http://www.tuling123.com/openapi/api"
              # 2、发送请求,获取响应
              params ={"key":"ec961279f453459b9248f0aeb6600bbe","info":"怎么又是你呀"}
              res = requests.post(url,params)
              # 3、解析响应
              print(res.text)
              res_dict = res.json() # 将响应转为json对象(字典)等同于`json.loads(res.text)`
              print(json.dumps(res_dict,indent=2, sort_keys=True, ensure_ascii=False))
              复制
              运行结果:
              • indent: 缩进空格数,indent=0输出为一行
              • sork_keys=True: 将json结果的key按ascii码排序
              • ensure_ascii=Fasle: 不确保ascii码,如果返回格式为utf-8包含中文,不转化为\u

              5.2)反序列化(文本/文件句柄 -> 字典) : json.loads()/json.load()
                import json
                res_text ='{"name": "\u5f20\u4e09", "password": "123456", "gender": "male"}'
                # 反序列化
                res_dict = json.loads(res_text)
                print(res_dict['name'])
                复制
                运行结果:

                5.3)文件的序列化与反序列化
                • 序列化:字典 -> 文件句柄
                • 序列化:文件句柄 -> 字典

                5.3.1)序列化:字典 -> 文件句柄
                  import json
                  res_dict = {'name': '张三', 'password': '123456', "male": True} # 字典格式
                  f = open("demo1.json","w")
                  json.dump(res_dict,f)
                  复制
                  运行结果:

                  5.3.2)序列化:文件句柄 -> 字典
                  准备demo2.json文件,内容如下,保存
                  读取json文件
                    import json
                    f = open("demo2.json","r",encoding="utf-8") # 文件中有中文需要指定编码
                    f_dict = json.load(f)
                    print(f_dict['name'])
                    f.close()
                    复制
                    运行结果:

                    6)什么时候使用JSON对象(字典)什么时候使用JSON文本?
                    • 发送请求时,使用json.dumps(data),转化为文本发送
                    • 收到请求后,使用json.loads(res.text),转化为字典,获取其中的参数信息

                    四、总结
                    • requests安装
                      • pip install requests
                    • requests使用
                      • 请求的步骤
                        • 组装请求:请求包含:url,params(url参数),data(请求数据),header(请求头),cookie等
                        • 发送请求,获取响应:支持get,post等方法发送,返回的是一个响应对象
                        • 解析响应:输出响应文本
                      • 使用
                        • 无参数GET请求
                        • 带参数GET请求,params(url参数,为字典格式)
                        • 传统表单类POST请求(x-www-form-urlencoded),data(请求数据,为字典格式)
                        • JSON类型的POST请求(application/json)
                          • 字符串"""data内容多行""",或者 'data内容单行'
                          • 严格的JSON格式字符串,里面必须用双引号,k-v之间必须有逗号
                    • JSON类型解析
                      • 为什么要序列化
                        • 将内存中的对象转化为文本或者文件格式,来满足传输和持久化(存储)需求
                      • 什么是序列化
                        • 序列化:内存对象 -> 文本/文件
                        • 反序列化:文本 -> 内存对象
                      • 对象在HTTP中的传输过程
                        • HTTP协议是超文本传输协议,是通过文本或二进制进行传输的
                        • 所以发送的请求要转化成文本进行传输,收到的响应也是文本格式
                      • JSON对象与Python字典的区别
                        • JSON对象是javascript object即javascript中的对象
                        • Python中一般提到JSON对象指的是字典
                      • JSON格式操作方法
                        • 序列化(字典 -> 文本/文件句柄):json.dumps() json.dump()
                        • 反序列化(文本/文件句柄 -> 字典) : json.loads() / json.load()
                      • 什么时候使用JSON对象(字典)什么时候使用JSON文本?
                        • 发送请求时,使用json.dumps(data),转化为文本发送
                        • 收到请求后,使用json.loads(res.text),转化为字典,获取其中的参数信息

                    碎碎念:
                    • 目前欠了两篇文章,本打算昨天补上的,昨天电脑进水了导致多欠了一篇orz
                    • 最近负责的东西比较多,等我下周忙完一定会补上欠的内容
                    • 因为最近目标有变动,优先更新接口测试这块,django的部分会以次条的形式不定期更新

                    “你的鼓励,是我继续的动力”
                    文章转载自走向易富强之路,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                    评论