基于python接口自动化总结(三)

1. requests库概述

restful 风格 http 接口请求构造一般基于 python 的 requests 库。这部分简单介绍 requests 库源码,熟悉其内部函数调用,文件组成框架。首先,在 pycharm 中进行 requests 库 API 调用,由此及里,层层了解其各函数

Ctrl + 鼠标,查看 request.get() 源码,在文件 api.py 中,get() 方法调用 request() ;request() 方法体使用 with...as... 格式,其使用 sessions.py 文件中 Session 类下方法 request()。可知:每次发送 get 请求都会重建 session,cookies 等信息不能复用,且重建 TCP 连接,不是长连接;在之后接口封装可以改进。 同时,Session 类中有 close() 方法

在 sessions.py 文件中,request() 函数会实例化 models.py 中 Request 类。

models.py 文件 Request 类是最底层,sessions.py对会话进行封装 可以复用cookies,最上层api.py 文件提供简单各方法调用,但各请求不能复用会话。

当需要打印 发送请求信息 场景,例 打印发送 headers:    有2种方法

1)使用 requests.get() 返回对象中 request :

res = requests.get("https://www.baidu.com")
request_headers = res.request.headers
print(request_headers)                 # {'User-Agent': 'python-requests/2.31.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}

2)使用最底层 Request 类中 prepare(不推荐使用,直接调用底层不方便使用),具体实例见下:

import requests

req = requests.Request('POST','http://stackoverflow.com',headers={'X-Custom':'Test'},data='a=1&b=2')

prepared = req.prepare()
print(prepared.url)                 # http://stackoverflow.com/
print(prepared.method)              # POST
print(prepared.headers)             # {'X-Custom': 'Test', 'Content-Length': '7'}
print(type(prepared.headers))       # <class 'requests.structures.CaseInsensitiveDict'>

小结: 

1) Request 底层调用虽然可以打印发送信息,但需要重写sessions,工作量较大;等于一般接口自动化中需要一个统一封装接口,简单实施 可以在session直接调用封装

2) 使用打断点,跟进函数;理解各函数调用

以上只是尝试介绍 requests 库,接下简要讨论下 使用 requests 发送 http 请求需要注意点。

2. requests中函数

2.1 各方法总结

get(url, params=None, **kwargs)
post(url, data=None, json=None, **kwargs)
put(url, data=None, **kwargs)
delete(url, **kwargs)   
# 以上4个 api.py 中方法调用 sessioons.py 中 request 方法

request(method, url, **kwargs)   
# sessions.py 中 request 作为统一接口,供上层调用;其调用下层 models.py 中 request。注意各封装层使用 **kwargs
session()
# 此函数在 sessions.py 中,调用后返回 Session 对象供使用, 能起到会话作用 

request(self, method, url, params=None, data=None, headers=None, cookies=None,         files=None,auth=None, timeout=None, allow_redirects=True, proxies=None,         hooks=None,stream=None, verify=None, cert=None,json=None,)   
# 该函数定义所有参数在 http 请求拼装中使用,各参数作用见下

请求返回 res 对象的属性见下:

2.2 post请求data传参和json传参区别

使用 data 或 json 区别:

1)会使得请求头中Content-Type内容不同,服务端按照接收Content-Type对body进行解析

2)使得请求体body的格式根据Content-Type而不同

因post方式支持上传格式很多,一般body格式有3种:data(传统表单、文本)、json(JSON格式)、files(文件上传、文本、二进制)

当post()方法使用json参数,发送请求会自动添加header:Content-Type:application/json;但使用data不会添加对应请求头

参考文章:

使用python发送请求

Python请求 - 打印整个http请求(原始)?
 

requests中post参数data和json区别

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值