Python网络请求本质是模拟HTTP通信,包含请求行、头、空行、体四部分;响应同理分状态行、头、空行、体;需关注状态码、Content-Type、连接复用(Session)、超时及底层socket机制。
Python做网络请求,本质是模拟浏览器向服务器发送HTTP请求并接收响应。核心不在语言本身,而在理解HTTP协议如何工作——请求怎么发、服务器怎么回、数据怎么传、状态怎么判。
每次请求都包含:请求行(方法+路径+协议)、请求头(携带元信息)、空行、请求体(如POST提交的数据)。比如用requests.get("https://httpbin.org/get"),Python底层会组装出标准HTTP报文,通过TCP连接发送到目标服务器的80或443端口。
置Content-Type头告知服务器数据格式服务器返回的响应也分四部分:状态行(协议+状态码+描述)、响应头、空行、响应体。Python收到后自动解包,response.status_code拿到状态码,response.text或response.json()解析内容。
HTTP/1.1默认启用持久连接(Keep-Alive),但Python的requests库不会自动复用连接,每次调用都是新连接——高并发时可能触发“too many open files”错误。
requests库底层用urllib3,最终靠Python的socket模块建立TCP连接。你可以手动用socket发原始HTTP请求来验证理解: