requests结构:
一、__init__.py 中import 其他py文件的方法
requests的使用只需要import之后,直接调用get、post、put、delete、requests等方法
>>> import requests
>>> r = requests.get('https://www.python.org')
>>> r.status_code
200
>>> 'Python is a programming language' in r.content
True
requests的__init__初始化方法中,import api.py里定义的get,post等方法,可以通过模块名直接调用方法。
from .api import request, get, head, post, patch, put, delete, options
在api.py中包括requests常用的get、post、put、delete、option等api方法,它们通过调用api模块中的request产生作用,
api中request方法在模块内实例化一个Session类对象,用上下文管理器with调用Session实例对象的request方法并返回。
Tips:1. 模块仅对外暴露方法,简化外部调用。(而不是封装成类,调用前还要实例化)
2. 使用with管理方法调用方法,调用结束时及时回收资源
二、session.py方法
requests模块的get,post等方法最终调用的都是Session类的request方法,在Session类request方法中,首先创建Request类实例对象,将实例对象作为参数创建了一个PreparedRequest类实例,再将PreparedRequest类实例作为参数,调用了Session类send方法,。在Session类send方法中,创建HTTPAdapater适配器、调用HTTPAdapater的send方法,处理cookies,hooks,redirects等问题,返回Response响应对象。
三、代码结构
for human beings,从文件名就能看出各个py文件的作用
TODO:1.只看了个流程,具体实现很多还没捋清,待
2. requests的hook,cookies继续了解