python入门系列十八(requests)

1.引言

互联网应用中,最为熟悉的一个是浏览器,一个是http协议。浏览器作为入口,打开了互联网世界的大门,http协议则是通信的基石。

python编程语言应用最多的场景之一是爬虫,相比较其它编程语言,python提供了更便捷http请求与响应解析相关的库。比如官方标准库urllib,以及扩展标准库urllib的第三方库requests。

2.http协议

2.1.定义与特性

http(hyperText Transfer Protocol),即超文本传输协议。所谓超文本,是超出文本范围,支持多媒体数据的意思,何为多媒体?图片,语音,视频等等。关于http有几个特点,你应该要知道:

  • 无状态:请求之间相互独立
  • 编程模型:一请求一响应
  • 可扩展:通过header头部字段实现能力扩展
  • 支持格式丰富:html/json/xml/二进制

2.2.请求与响应格式

2.2.1.请求格式

js 复制代码
POST /api/v1/login HTTP/1.1
Host: api.example.com
Content-Type: application/json
Authorization: Bearer xxxxxx
User-Agent: Mozilla/5.0

{"username": "admin", "password": "******"}

协议格式描述:

  • 请求行:第一行,包含(请求方法+url+协议版本)
  • 请求头:第二行开始,到空行。 控制参数(缓存/认证/内容协商)
  • 请求体:空行后面的内容,用于传输请求数据

浏览器截图:

2.2.2.响应格式

js 复制代码
HTTP/1.1 200 OK
Server: nginx/1.18.0
Content-Type: application/json; charset=utf-8
Cache-Control: max-age=3600

{"status": "success", "data": {...}}

协议格式描述:

  • 状态行:第一行,包含(协议版本+状态码+状态文本)
  • 响应头:第二行,到空行。 服务器信息/内容类型/缓存策略
  • 响应体: 返回数据主体

浏览器截图:

2.3.请求方法

http协议提供了丰富的请求方法,支持丰富的应用场景。比如流行的rest 风格api设计中用到:get、post、put、delete方法。当然http中不只这四种方法,有更多

2.4.状态码

2.5.版本

发展至今,http协议发布了三个大版本,当然今天约有三分之二的应用在用http1.1,约有三分之一的应用在用http2,http3于2022年发布,还是新事物,少量应用已经支持了。

3.requests示例

3.1.环境准备

requests库,是第三方库,在使用前,需要安装

shell 复制代码
pip install requests

3.2.入门示例

请求一下我们之前自己搭建的web服务器:http://127.0.0.1:8080

示例代码:

python 复制代码
import requests

url_path = "http://127.0.0.1:8080/"
res = requests.get(url_path)
print(f"响应状态码:{res.status_code}")
print(f"响应内容:{res.text}")

你看到了,通过requests库,非常方便支持实现http请求相关应用。

3.3.GET请求传参数

GET请求,如果想要在请求的时候,传递参数,可以这样

python 复制代码
import requests

url_path = "http://127.0.0.1:8080/"

params = {
    "name": "小王",
    "age": 18
}

res = requests.get(url_path, params=params)

print(f"响应状态码:{res.status_code}")
print(f"响应内容:{res.text}")

服务端成功接收到参数:

3.4.POST请求传参数

POST请求,如果想要在请求的时候,传递参数,可以这样

python 复制代码
import requests

url_path = "http://127.0.0.1:8080/"

params = {
    "name": "小王",
    "age": 18
}

# post请求,传递参数
res = requests.post(url_path, data=params)

print(f"响应状态码:{res.status_code}")
print(f"响应内容:{res.text}")

通过调试,服务端同样接收到请求参数:

3.5.响应信息

通过以上示例,python中的requests库真的是一个保障库,不管是post请求,还是get请求,以及其它请求方法。站在用户角度去看,拥有一致的使用体验,这即是我们在软件设计中强调的良好抽象能力!

同样requests库在响应上,实现非常好的抽象封装:

python 复制代码
import requests

url_path = "http://127.0.0.1:8080/"

params = {
    "name": "小王",
    "age": 18
}

# post请求,传递参数
res = requests.post(url_path, data=params)

print(f"响应状态码:{res.status_code}")
print(f"响应内容:{res.text}")
print(f"响应头:{res.headers}")
print(f"字符编码:{res.encoding}")
print(f"请求url: {res.url}")
相关推荐
Sui_Network3 分钟前
Sui Stack Messaging SDK:为 Web3 打造可编程通信
大数据·人工智能·科技·web3·去中心化·区块链
Lxinccode6 分钟前
python(42) : 监听本地文件夹上传到服务器指定目录
服务器·开发语言·python·文件上传服务器·监听文件上传服务器
金井PRATHAMA6 分钟前
GraphRAG对自然语言处理中深层语义分析的革命性影响与未来启示
人工智能·自然语言处理·知识图谱
人工智能培训8 分钟前
Transformer-位置编码(Position Embedding)
人工智能·深度学习·大模型·transformer·embedding·vision
丰年稻香17 分钟前
神经网络二分类任务详解:前向传播与反向传播的数学计算
人工智能·神经网络·分类
Lethehong28 分钟前
DeepSeek-V3.1-Terminus:蓝耘API+CherryStudio实测国产最新开源模型,推理能力竟让我后背发凉
人工智能·大模型·deepseek·蓝耘元生代·蓝耘maas·ai ping
咖啡星人k31 分钟前
AI 大模型驱动的开源知识库搭建系统 PandaWiki的网页挂件机器人教程
人工智能·机器人·开源
QYR_1132 分钟前
机器人定位器市场报告:2025-2031 年行业增长逻辑与投资机遇解析
大数据·人工智能
我是个菜鸡.39 分钟前
视觉/深度学习/机器学习相关面经总结(3)(持续更新)
人工智能·深度学习·机器学习
小oo呆39 分钟前
【自然语言处理与大模型】RAG发展过程中的三个范式
人工智能·自然语言处理