HTTP 请求与数据交互全景指南:Request、GET、POST、JSON 及 curl
HTTP 请求与数据交互全景指南:从概念到实战到流程对照
- 1. Request ——请求的核心概念
- 2. HTTP 方法详解
- 3. 请求头(Headers)与请求体(Body)
- 请求头
- 请求体
- 4. GET 与 POST ——两种主要请求方式
- GET 请求
- POST 请求
- 5. JSON ——网络通信的常用格式
- 6. 响应(Response)相关概念
- 7. curl ——命令行的万能工具
- 基本用法
- 8. 补充概念
- 9. 实战示例:Python + curl 完整流程
- 9.1 Python 实现
- 9.2 curl 实现
- GET 请求
- POST 请求发送 JSON 数据
- 10. 流程对照表:GET/POST + JSON + curl + Python
- 11. 总结
在现代软件开发中,网络请求无处不在。无论是调用第三方接口,还是开发前后端交互程序,我们都离不开 HTTP 请求 和 数据交换。本文将系统地介绍 Request、GET、POST、JSON、curl 及相关概念,并通过实战示例和流程对照表,让你快速掌握完整流程。
1. Request ——请求的核心概念
在网络通信中,客户端(如浏览器或程序)向服务器发起 请求(Request),服务器处理后返回响应(Response)。
每个请求通常包含:
- 请求方法(HTTP Method):如 GET、POST、PUT、DELETE 等,表示操作类型。
- URL(统一资源定位符):请求目标资源的位置,例如
https://api.example.com/user/1。 - 请求头(Headers):携带元信息,例如
Content-Type、Authorization、User-Agent。 - 请求体(Body / Payload):在需要发送数据时使用,例如表单数据、JSON。
可以把 request 想象成“写给服务器的信”,告诉它“我想做什么”,并附带信息。
2. HTTP 方法详解
| 方法 | 用途 | 特点 |
|---|---|---|
| GET | 获取资源 | 参数在 URL 中,不修改服务器状态,可缓存 |
| POST | 提交数据 | 数据在请求体中,可能修改服务器状态 |
| PUT | 更新资源(全量) | 数据在请求体中,覆盖原资源 |
| PATCH | 更新资源(部分) | 数据在请求体中,只修改部分字段 |
| DELETE | 删除资源 | 请求服务器删除指定资源 |
| HEAD | 获取响应头 | 与 GET 类似,但不返回响应体 |
| OPTIONS | 查询服务器支持方法 | 常用于跨域检查 |
3. 请求头(Headers)与请求体(Body)
请求头
请求头用于传递元信息,例如:
Content-Type:请求/响应的数据格式,如application/jsonAuthorization:身份认证信息,如 TokenUser-Agent:客户端类型和版本Accept:客户端可接受的返回格式
请求体
-
常见于 POST、PUT、PATCH 请求
-
常用数据格式:
- JSON(轻量、易读、跨语言)
- Form 表单数据(
application/x-www-form-urlencoded) - Multipart/form-data(上传文件用)
4. GET 与 POST ——两种主要请求方式
GET 请求
-
用途:获取资源(读取数据)
-
特点:
- 参数附在 URL 末尾,如
https://api.example.com/user?id=1 - 可被缓存,通常不会修改服务器状态
- 参数附在 URL 末尾,如
-
Python 示例:
import requestsresponse = requests.get('https://api.example.com/user', params={'id': 1})
print(response.text)
POST 请求
-
用途:提交数据(创建或修改资源)
-
特点:
- 参数在请求体中,不显示在 URL 上
- 常用于提交表单或发送 JSON
-
Python 示例:
import requestsdata = {'username': 'alice', 'password': '123456'}
response = requests.post('https://api.example.com/login', json=data)
print(response.json())
小结:GET 是“拿数据”,POST 是“提交数据”。
5. JSON ——网络通信的常用格式
JSON(JavaScript Object Notation) 是轻量级的数据交换格式,易读易写,跨语言支持广泛。
JSON 示例:
{"name": "Alice","age": 25,"is_admin": false
}
- 序列化(Serialize):将对象转换为 JSON 字符串
- 反序列化(Deserialize / Parse):将 JSON 字符串解析为程序对象
- JSON Schema:描述 JSON 数据结构的标准,便于验证数据格式
6. 响应(Response)相关概念
服务器处理请求后返回响应,包括:
- 状态码(Status Code):表示处理结果,例如 200 成功,404 未找到,500 服务器错误
- 响应体(Body):实际返回的数据(JSON、HTML、图片等)
- 响应头(Headers):如
Content-Type、Set-Cookie
7. curl ——命令行的万能工具
curl 是一个命令行工具,用于发送 HTTP 请求、调试接口或下载文件。
基本用法
- GET 请求:
curl https://api.example.com/user?id=1
- POST 请求发送 JSON 数据:
curl -X POST https://api.example.com/login \-H "Content-Type: application/json" \-d '{"username":"alice","password":"123456"}'
-
常用选项:
-X / --request:指定请求方法-H / --header:添加请求头-d / --data:请求体数据-i / --include:显示响应头-v / --verbose:调试模式,显示完整请求和响应
8. 补充概念
- URL 参数(Query Parameters):GET 请求附在 URL,如
?id=1&sort=asc - REST API:基于 HTTP 方法设计的接口风格
- CORS(跨域资源共享):浏览器对跨域请求的安全机制
- 接口调试工具:Postman、Insomnia 等,可视化操作 curl 功能
9. 实战示例:Python + curl 完整流程
假设访问示例 API:
- GET 请求获取用户信息:
https://api.example.com/user?id=1 - POST 请求提交登录信息:
https://api.example.com/login
9.1 Python 实现
import requests# ---- GET 请求 ----
get_url = 'https://api.example.com/user'
get_params = {'id': 1}
response_get = requests.get(get_url, params=get_params)print("GET 请求状态码:", response_get.status_code)
print("GET 请求返回 JSON:", response_get.json())# ---- POST 请求 ----
post_url = 'https://api.example.com/login'
post_data = {'username': 'alice', 'password': '123456'}
response_post = requests.post(post_url, json=post_data)print("POST 请求状态码:", response_post.status_code)
print("POST 请求返回 JSON:", response_post.json())
9.2 curl 实现
GET 请求
curl "https://api.example.com/user?id=1"
POST 请求发送 JSON 数据
curl -X POST "https://api.example.com/login" \-H "Content-Type: application/json" \-d '{"username":"alice","password":"123456"}'
10. 流程对照表:GET/POST + JSON + curl + Python
| 步骤 | GET 请求 | POST 请求 | JSON 数据 | Python (requests) | curl |
|---|---|---|---|---|---|
| 1 | 构造 URL + 参数 | 构造 URL + 请求体 | 构造 Python 字典或 JSON 字符串 | params 或 json= 参数 | URL + -d 或 --data |
| 2 | 发送请求 | 发送请求 | 自动序列化为 JSON | requests.get(url, params=params) requests.post(url, json=data) | curl URL curl -X POST URL -H "Content-Type: application/json" -d '{"key":"value"}' |
| 3 | 等待服务器响应 | 等待服务器响应 | 服务器返回 JSON 数据 | response = requests.get(...) 或 requests.post(...) | curl 输出响应到终端 |
| 4 | 获取状态码 | 获取状态码 | 可通过 Content-Type 判断 | response.status_code | curl -i 显示响应头 |
| 5 | 解析响应体 | 解析响应体 | 将 JSON 字符串解析为对象 | response.json() → Python 字典 | 终端输出 → 可用 jq 解析 JSON |
| 6 | 使用数据 | 使用数据 | 处理业务逻辑 | Python 代码直接操作字典 | shell 脚本或管道处理 |
11. 总结
通过本文,你可以掌握:
- HTTP 请求的基本概念:Request、Response、Headers、Body
- 常用方法:GET、POST、PUT、PATCH、DELETE
- 数据交换格式:JSON 的序列化与反序列化
- 命令行调试工具:curl 的使用技巧
- 实战操作:Python 与 curl 对照完成 GET/POST 请求,并解析 JSON
- 完整流程对照表:一眼理解请求发送、响应接收、数据解析的全过程
