欢迎来到 Python 基础入门 Day13!昨天我们学习了 Python 的网络编程,介绍了如何使用 socket
模块实现 TCP 和 UDP 通信。今天,我们将深入探讨 Python 中用于处理 网络请求 的强大模块 —— requests
。这个模块是 Python 中最流行的第三方库之一,它简化了 HTTP 请求的处理,让我们更轻松地与 Web 进行交互。
目录
- 什么是 HTTP 协议?
- 安装
requests
模块 - 发送 HTTP 请求
- 处理请求响应
- 常见的请求方法
- 发送请求时的其他选项
- 异常处理
- 小结与练习
一、什么是 HTTP 协议?
HTTP(Hypertext Transfer Protocol)是 Web 上的主要通信协议。它定义了客户端(通常是浏览器)与服务器之间如何传输文本、图像、视频等数据。HTTP 协议有几种常用的请求方法:
- GET:请求获取资源(默认)。
- POST:提交数据到服务器。
- PUT:更新资源。
- DELETE:删除资源。
二、安装 requests
模块
在使用 requests
模块之前,我们需要确保已经安装了它。使用以下命令进行安装:
pip install requests
注意:通常
requests
模块会预装在大部分 Python 环境中,如果你遇到ModuleNotFoundError
,再执行上述命令安装即可。
三、发送 HTTP 请求
使用 requests
模块发送 HTTP 请求非常简单。以下是一个基本示例:
import requests
response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
print(response.text)
- 解释:
requests.get(url)
:发送 GET 请求到指定 URL。response.text
:返回响应内容(字符串形式)。
输出结果
{
"userId": 1,
"id": 1,
"title": "sample title",
"body": "This is a sample post content."
}
四、处理请求响应
4.1 获取响应的各种信息
我们可以从响应对象中获取更多详细信息:
print(response.status_code) # 状态码
print(response.headers) # 响应头
print(response.json()) # JSON 格式的数据(字典)
print(response.url) # 请求的 URL
4.2 常见的状态码
- 200:请求成功。
- 404:请求的资源未找到。
- 500:服务器内部错误。
五、常见的请求方法
5.1 GET 请求
params = {'userId': 1}
response = requests.get('https://jsonplaceholder.typicode.com/posts', params=params)
print(response.json())
- 解释:
params
参数用于传递 URL 查询字符串。
5.2 POST 请求
data = {'title': 'New Post', 'body': 'This is the content', 'userId': 1}
response = requests.post('https://jsonplaceholder.typicode.com/posts', json=data)
print(response.json())
- 解释:
json
参数用于发送 JSON 格式的请求体。
5.3 PUT 请求
update_data = {'title': 'Updated Title'}
response = requests.put('https://jsonplaceholder.typicode.com/posts/1', json=update_data)
print(response.json())
5.4 DELETE 请求
response = requests.delete('https://jsonplaceholder.typicode.com/posts/1')
print(response.status_code)
六、发送请求时的其他选项
6.1 自定义请求头
headers = {'User-Agent': 'my-app/0.0.1'}
response = requests.get('https://httpbin.org/headers', headers=headers)
print(response.json())
6.2 文件上传
files = {'file': open('example.txt', 'rb')}
response = requests.post('https://httpbin.org/post', files=files)
print(response.json())
6.3 超时设置
response = requests.get('https://httpbin.org/delay/5', timeout=3) # 3 秒超时
注意:如果请求超过了指定的
timeout
时间,将抛出requests.exceptions.Timeout
异常。
6.4 处理 Cookies
response = requests.get('https://httpbin.org/cookies', cookies={'mycookie': 'value'})
print(response.json())
七、异常处理
在处理网络请求时,可能会遇到各种异常情况,例如网络超时、服务器无响应等。可以通过 try-except
语句进行捕获:
try:
response = requests.get('https://httpbin.org/status/404')
response.raise_for_status() # 如果响应状态码是 4xx/5xx,将抛出异常
except requests.exceptions.HTTPError as errh:
print("Http Error:", errh)
except requests.exceptions.ConnectionError as errc:
print("Error Connecting:", errc)
except requests.exceptions.Timeout as errt:
print("Timeout Error:", errt)
except requests.exceptions.RequestException as err:
print("OOps: Something Else", err)
八、小结与练习
今天我们学习了如何使用 Python 的 requests 模块 发送和处理 HTTP 请求。这个模块对于 Web 爬虫、API 调用以及网络数据处理非常有用。希望通过这些示例,你可以更熟练地操作网络请求。
今日练习题:
- 使用
requests
模块获取一个公开 API(如 GitHub API)上的用户信息。 - 编写一个 Python 脚本,使用 POST 方法提交数据并验证响应。
- 使用
requests
模块下载一张图片并保存到本地。
下一节预告:在 Day14 中,我们将介绍 Python 的 Web 爬虫技术,带你深入了解如何从网络上自动提取数据。敬请期待!
希望这篇文章对你有所帮助!祝你学习愉快 😊。如果有任何问题或建议,请随时留言。