本章中的关键主题,建议结合示例反复练习。
网络编程概述
约 1658 字大约 6 分钟
2026-05-10
网络编程是指编写通过网络进行数据交换的程序。只要程序需要访问网页、调用 API、连接数据库、上传文件、下载资源、实现聊天或实时通知,就离不开网络编程。
- 客户端与服务端
- 请求与响应
- 网络编程常见方向
- 常见问题
建议先建立整体地图,再按章节逐步深入。
本章中的关键主题,建议结合示例反复练习。
本章中的关键主题,建议结合示例反复练习。
本章中的关键主题,建议结合示例反复练习。
本章中的关键主题,建议结合示例反复练习。
网络编程是指编写通过网络进行数据交换的程序。只要程序需要访问网页、调用 API、连接数据库、上传文件、下载资源、实现聊天或实时通知,就离不开网络编程。
客户端与服务端
网络通信中通常有两个角色:
- 客户端(Client):主动发起请求的一方,例如浏览器、手机 App、Python 脚本。
- 服务端(Server):监听端口、接收请求并返回响应的一方,例如 Web 服务、API 服务、数据库服务。
Client ---- request ----> Server
Client <--- response ---- ServerPython 既可以写客户端程序,也可以写服务端程序。调用第三方 API、写爬虫时,Python 通常是客户端;写 socket 服务、Web 服务时,Python 通常是服务端。
请求与响应
大多数网络交互都可以理解为“请求—响应”模型:
- 客户端准备目标地址、参数、请求头、请求体。
- 客户端通过网络把请求发给服务端。
- 服务端处理请求。
- 服务端返回状态码、响应头和响应体。
- 客户端解析响应并处理结果。
HTTP API 调用就是最典型的请求响应模型。
网络编程常见方向
Python 网络编程常见方向包括:
- 调用 HTTP API:例如调用 GitHub、天气、短信、支付接口。
- 写爬虫:请求网页,解析 HTML,提取数据。
- 写 socket 程序:基于 TCP/UDP 自定义通信协议。
- 写 WebSocket 程序:实现聊天、实时通知、日志推送。
- 写 Web 后端:使用 Django、Flask、FastAPI 提供 HTTP 服务。
本章节重点讲 Python 基础阶段最常见的网络能力:HTTP、requests/httpx、API Client、socket、WebSocket、爬虫和安全实践。
常见问题
网络环境是不可靠的,因此网络编程必须考虑:
- 请求超时
- 连接失败
- DNS 解析失败
- 远程服务 4xx / 5xx
- JSON 解析失败
- 编码问题
- TLS 证书错误
- 代理配置
- 限流和重试
- Cookie / Token 过期
写网络代码不能只考虑“正常返回”的情况,还要认真处理失败。
学习路线
建议按下面顺序学习:
- 网络基础:IP、端口、域名、DNS、TCP/UDP。
- URL 与编码:理解 URL 的组成和 query 参数。
- HTTP 基础:请求方法、状态码、Header、Body、Cookie。
- requests:掌握同步 HTTP 请求。
- Session:理解登录态和连接复用。
- httpx:学习同步/异步 HTTP 客户端。
- API Client:把零散请求封装成可维护代码。
- 超时、重试、限流:让网络代码更健壮。
- socket:理解更底层的 TCP 通信。
- WebSocket、爬虫、安全和最佳实践。
学习时先抓住一条主线
刚开始学网络编程,不要一上来就陷入各种协议细节。你可以先把一次网络请求想成下面这条线:
我的程序 -> 找到对方地址 -> 建立连接 -> 发出请求 -> 等待响应 -> 解析结果例如你写:
import requests
response = requests.get('https://httpbin.org/get', timeout=5)
print(response.status_code)这几行代码背后大致发生了这些事:
- 从 URL 里拿到域名
httpbin.org; - 通过 DNS 找到服务器 IP;
- 和服务器的 443 端口建立 TCP 连接;
- 进行 HTTPS 加密协商;
- 发送 HTTP 请求;
- 收到 HTTP 响应;
- requests 把响应包装成
response对象。
初学阶段不用把每一步都背下来,但要知道:网络请求不是“函数本地计算”,它依赖外部服务、网络环境和对方返回,因此一定会比普通函数调用更容易失败。
网络代码为什么经常失败
网络编程里的失败很正常,不代表你代码一定写错了。常见原因包括:
| 现象 | 可能原因 | 优先检查 |
|---|---|---|
| 域名解析失败 | DNS 问题、域名写错 | URL、网络、DNS |
| 连接超时 | 服务器不可达、防火墙、端口没开 | 地址、端口、代理 |
| 读取超时 | 服务器响应太慢 | timeout、服务端状态 |
| 401 / 403 | 没登录、Token 错误、权限不足 | Header、Cookie、Token |
| 404 | 路径不存在 | URL 路径、接口文档 |
| 500 | 服务端内部错误 | 请求参数、服务端日志 |
所以写网络代码时,要养成三个习惯:设置超时、检查状态码、打印关键上下文。
一个最小排查流程
当请求失败时,可以按这个顺序排查:
- URL 有没有写错,尤其是协议、域名、路径和 query 参数。
- 浏览器或
curl能不能访问同一个地址。 - Python 代码是否设置了正确的 Header、Cookie 或 Token。
- 是否设置了过短的 timeout。
- 错误是连接失败、状态码错误,还是响应内容解析失败。
这个流程很朴素,但对初学者特别有用。不要一看到报错就立刻改一大堆代码,先判断问题发生在哪一层。
总结
网络编程不是简单地“发个请求”。可靠的网络程序需要理解协议基础、正确处理异常、设置超时、保护敏感信息,并用合适的抽象组织代码。
- 网络编程可以先理解成“找到地址、建立连接、发送请求、读取响应”。
- 网络失败很常见,排查时先区分 DNS、连接、HTTP 状态码和响应解析。
- 初学者先掌握 requests、HTTP、超时、错误处理,再逐步理解 socket 和 WebSocket。
版权所有
版权归属:Shuo Liu
