HTTP 请求与数据交互全景指南:Request、GET、POST、JSON 及 curl

HTTP 请求与数据交互全景指南:从概念到实战到流程对照

    • [1. Request ------请求的核心概念](#1. Request ——请求的核心概念)
    • [2. HTTP 方法详解](#2. HTTP 方法详解)
    • [3. 请求头(Headers)与请求体(Body)](#3. 请求头(Headers)与请求体(Body))
    • [4. GET 与 POST ------两种主要请求方式](#4. GET 与 POST ——两种主要请求方式)
      • [GET 请求](#GET 请求)
      • [POST 请求](#POST 请求)
    • [5. JSON ------网络通信的常用格式](#5. JSON ——网络通信的常用格式)
    • [6. 响应(Response)相关概念](#6. 响应(Response)相关概念)
    • [7. curl ------命令行的万能工具](#7. curl ——命令行的万能工具)
    • [8. 补充概念](#8. 补充概念)
    • [9. 实战示例:Python + curl 完整流程](#9. 实战示例:Python + curl 完整流程)
      • [9.1 Python 实现](#9.1 Python 实现)
      • [9.2 curl 实现](#9.2 curl 实现)
        • [GET 请求](#GET 请求)
        • [POST 请求发送 JSON 数据](#POST 请求发送 JSON 数据)
    • [10. 流程对照表:GET/POST + JSON + curl + Python](#10. 流程对照表:GET/POST + JSON + curl + Python)
    • [11. 总结](#11. 总结)

在现代软件开发中,网络请求无处不在。无论是调用第三方接口,还是开发前后端交互程序,我们都离不开 HTTP 请求数据交换 。本文将系统地介绍 Request、GET、POST、JSON、curl 及相关概念,并通过实战示例和流程对照表,让你快速掌握完整流程。


1. Request ------请求的核心概念

在网络通信中,客户端(如浏览器或程序)向服务器发起 请求(Request),服务器处理后返回响应(Response)。

每个请求通常包含:

  1. 请求方法(HTTP Method):如 GET、POST、PUT、DELETE 等,表示操作类型。
  2. URL(统一资源定位符) :请求目标资源的位置,例如 https://api.example.com/user/1
  3. 请求头(Headers) :携带元信息,例如 Content-TypeAuthorizationUser-Agent
  4. 请求体(Body / Payload):在需要发送数据时使用,例如表单数据、JSON。

可以把 request 想象成"写给服务器的信",告诉它"我想做什么",并附带信息。


2. HTTP 方法详解

方法 用途 特点
GET 获取资源 参数在 URL 中,不修改服务器状态,可缓存
POST 提交数据 数据在请求体中,可能修改服务器状态
PUT 更新资源(全量) 数据在请求体中,覆盖原资源
PATCH 更新资源(部分) 数据在请求体中,只修改部分字段
DELETE 删除资源 请求服务器删除指定资源
HEAD 获取响应头 与 GET 类似,但不返回响应体
OPTIONS 查询服务器支持方法 常用于跨域检查

3. 请求头(Headers)与请求体(Body)

请求头

请求头用于传递元信息,例如:

  • Content-Type:请求/响应的数据格式,如 application/json
  • Authorization:身份认证信息,如 Token
  • User-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
    • 可被缓存,通常不会修改服务器状态
  • Python 示例:

python 复制代码
import requests

response = requests.get('https://api.example.com/user', params={'id': 1})
print(response.text)

POST 请求

  • 用途:提交数据(创建或修改资源)

  • 特点:

    • 参数在请求体中,不显示在 URL 上
    • 常用于提交表单或发送 JSON
  • Python 示例:

python 复制代码
import requests

data = {'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 示例:

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-TypeSet-Cookie

7. curl ------命令行的万能工具

curl 是一个命令行工具,用于发送 HTTP 请求、调试接口或下载文件。

基本用法

  • GET 请求:
bash 复制代码
curl https://api.example.com/user?id=1
  • POST 请求发送 JSON 数据:
bash 复制代码
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 实现

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 请求
bash 复制代码
curl "https://api.example.com/user?id=1"
POST 请求发送 JSON 数据
bash 复制代码
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 字符串 paramsjson= 参数 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. 总结

通过本文,你可以掌握:

  1. HTTP 请求的基本概念:Request、Response、Headers、Body
  2. 常用方法:GET、POST、PUT、PATCH、DELETE
  3. 数据交换格式:JSON 的序列化与反序列化
  4. 命令行调试工具:curl 的使用技巧
  5. 实战操作:Python 与 curl 对照完成 GET/POST 请求,并解析 JSON
  6. 完整流程对照表:一眼理解请求发送、响应接收、数据解析的全过程
相关推荐
Unstoppable222 小时前
八股训练营第 8 天 | TCP连接三次握手的过程?TCP连接四次挥手的过程?HTTP的Keep-Alive是什么?
网络·tcp/ip·http·八股
_dindong2 小时前
Linux网络编程:应用层协议HTTP
网络·网络协议·http
Jerry2505093 小时前
什么是HTTPS?对网站有什么用?
网络·网络协议·http·网络安全·https·ssl
0和1的舞者3 小时前
网络的奥秘:HTTPS详解(八)
网络·网络协议·tcp/ip·http·https·四大件
chxii3 小时前
spring boot 获取HTTP 请求参数
spring boot·后端·http
大米粥哥哥7 小时前
c++ libcurl报错Send failed since rewinding of the data stream failed【已解决】
开发语言·c++·http·curl·rewind
njnu@liyong11 小时前
HTTP-http是什么?
网络·网络协议·http
愤怒的苹果ext16 小时前
MySQL JSON查询与索引
mysql·json·虚拟列·多值索引
njnu@liyong17 小时前
HTTP-大文件传输处理
网络·网络协议·http