网络

作为客户端一般用指的是使用python来访问接口,作为服务器一般指的是使用python来提供写接口服务。

作为客户端

一般是发http请求,接收http响应。
Python 中常用的HTTP 客户端有 requests 和 httpx。其中httpx是requests的替代品,更现代、功能更强大: 兼容90%以上的requests api,并且支持异步请求,还支持http2/3。

import httpx
import asyncio

# 同步请求
response = httpx.get("https://www.baidu.com")
print(response.text)

# 异步请求
async def fetch_baidu():
    # 创建一个异步客户端
    async with httpx.AsyncClient() as client:
        response = await client.get("https://www.baidu.com")
        print(f"状态码: {response.status_code}")
        print(response.text)
# 使用asyncio运行异步函数(更多参考这里xx)
asyncio.run(fetch_baidu())

通过 httpx.Client() 创建实例后再发送请求, 可以复用连接,提高性能。

import httpx

# 创建一个客户端实例
client = httpx.Client()

# 发送请求
response = client.get("https://www.baidu.com")
print(response.text)
提示

直接调用httpx.get(),每次请求都新建连接,结束后立即关闭。每次都要进行 TCP/TLS 握手。还不能不记录和敷用 Cookies 或 Auth 信息。适用于一次性的、临时的请求。

作为服务器

一般是接收http请求,发送http响应。
Python 中常用的HTTP 服务器有 flask 和 fastapi等。其中fastapi是flask的替代品,更现代、功能更强大。

import uvicorn
import fastapi
from fastapi import FastAPI

# 创建一个fastapi实例
app = FastAPI()

# 创建一个路由,和一个路由处理函数(这个函数会在请求到来时被调用)
@app.get("/")
def read_root():
    return {"message": "Hello, World!"}

# 启动服务器
uvicorn.run(app)
提示

FastApi是基于ASGI规范的框架(你也可以不用框架纯手撸,但是很枯燥),ASGI是WSGI的升级版,WSGI是Python社区定义的规范。 ASGI 服务器有很多,如Uvicorn、Hypercorn 等,ASGI 服务器是必需的运行时环境。在一个运行中的 FastAPI 应用里,存在三个层级:

  1. 协议规范 (ASGI): 规定了服务器和框架之间如何对话的“协议文档”,点击这里可查看ASGI规范定义
  2. ASGI框架 (如FastAPI): 你写代码地方。负责逻辑、路由、参数检查。它实现了 ASGI 协议,So它知咋接收服务器传来的数据
  3. ASGI服务器 (Uvicorn): 真正的“体力劳动者”。它负责监听端口、处理原始的 TCP 连接、解析 HTTP 协议,然后按照 ASGI 规范把请求“翻译”给 FastAPI。

uvicorn 是一个 Python 的 ASGI Web 服务器。简单说:它用来运行 FastAPI、Starlette 这类异步 Python Web 应用。