首页 > Python资料 博客日记
Python-request库的详细解析
2024-10-02 02:00:04Python资料围观29次
引言
在现代网络应用中,与服务器进行通信是一个非常基础且重要的功能。Python的requests
库是一个非常强大且易于使用的HTTP库,它允许我们发送HTTP请求,与Web服务进行交互。本文将详细介绍requests
库的使用,包括其基本概念、常用功能以及一些高级用法。
安装requests库
在使用requests
库之前,我们需要先安装它。可以通过pip
命令来安装:
pip install requests
基本概念
HTTP请求方法
HTTP协议定义了几种请求方法,最常见的有:
- GET:从服务器获取资源。
- POST:向服务器提交数据,通常用于创建新资源。
- PUT:更新服务器上的资源。
- DELETE:删除服务器上的资源。
请求URL
URL(Uniform Resource Locator)是用于定位资源的字符串。例如:https://api.example.com/data
。
请求头
请求头(Headers)包含了关于请求的元数据,例如内容类型、用户代理等。
请求体
请求体(Body)通常用于POST和PUT请求,包含要发送的数据。
基本用法
发送GET请求
发送GET请求是最简单的操作之一。以下是一个示例:
import requests
response = requests.get('https://api.github.com')
print(response.status_code) # 打印状态码
print(response.text) # 打印响应内容
发送POST请求
发送POST请求时,通常需要传递一些数据。以下是一个示例:
import requests
url = 'https://httpbin.org/post'
data = {'key': 'value'}
response = requests.post(url, data=data)
print(response.status_code) # 打印状态码
print(response.json()) # 打印JSON格式的响应内容
传递请求头
有时我们需要在请求中添加自定义的请求头。以下是一个示例:
import requests
url = 'https://api.github.com'
headers = {'User-Agent': 'my-app/0.0.1'}
response = requests.get(url, headers=headers)
print(response.status_code) # 打印状态码
print(response.text) # 打印响应内容
处理响应
状态码
响应的状态码表示请求的结果。常见的状态码有:
- 200:请求成功。
- 404:资源未找到。
- 500:服务器内部错误。
响应内容
响应内容可以是文本、JSON、二进制数据等。以下是一些示例:
import requests
response = requests.get('https://api.github.com')
# 获取文本内容
print(response.text)
# 获取JSON内容
print(response.json())
# 获取二进制内容
print(response.content)
响应头
响应头包含了关于响应的元数据。以下是一个示例:
import requests
response = requests.get('https://api.github.com')
print(response.headers)
高级用法详解
在掌握了requests
库的基本用法之后,我们可以进一步探索其高级功能。这些高级功能可以帮助我们更灵活、更高效地处理复杂的HTTP请求场景。以下是对高级用法的详细说明。
1. 会话对象(Session Objects)
会话对象允许我们在多个请求之间保持某些参数,例如cookies、headers等。使用会话对象可以简化代码,提高效率。
示例:
import requests
# 创建一个会话对象
session = requests.Session()
# 更新会话的默认headers
session.headers.update({'User-Agent': 'my-app/0.0.1'})
# 发送第一个请求,设置一个cookie
response1 = session.get('https://httpbin.org/cookies/set/sessioncookie/123456789')
print(response1.text)
# 发送第二个请求,获取之前设置的cookie
response2 = session.get('https://httpbin.org/cookies')
print(response2.text)
在这个示例中,我们创建了一个会话对象,并在多个请求之间共享了headers和cookies。这样可以确保在多个请求之间保持一致的状态。
2. 处理重定向(Handling Redirects)
默认情况下,requests
库会自动处理重定向。我们可以通过allow_redirects
参数来控制是否允许重定向。
示例:
import requests
# 禁止重定向
response = requests.get('http://github.com', allow_redirects=False)
print(response.status_code) # 打印状态码
print(response.headers['Location']) # 打印重定向的URL
在这个示例中,我们发送了一个GET请求到http://github.com
,并禁止了重定向。响应的状态码为301,表示请求被永久重定向,响应头中的Location
字段包含了重定向的目标URL。
3. 超时设置(Timeout Settings)
在发送请求时,我们可以设置超时时间,以避免长时间的等待。超时时间可以应用于连接阶段和读取阶段。
示例:
import requests
from requests.exceptions import Timeout
try:
# 设置连接超时和读取超时
response = requests.get('https://httpbin.org/delay/10', timeout=(3, 5))
except Timeout:
print('The request timed out')
在这个示例中,我们设置了一个3秒的连接超时和5秒的读取超时。如果请求在3秒内未能建立连接或在5秒内未能读取到响应数据,就会抛出Timeout
异常。
4. 代理支持(Proxy Support)
requests
库支持通过代理发送请求。我们可以为不同的协议(HTTP、HTTPS)设置不同的代理。
示例:
import requests
# 设置代理
proxies = {
'http': 'http://10.10.1.10:3128',
'https': 'http://10.10.1.10:1080',
}
response = requests.get('https://httpbin.org/ip', proxies=proxies)
print(response.text)
在这个示例中,我们为HTTP和HTTPS请求分别设置了代理。通过代理发送请求可以隐藏客户端的真实IP地址,或者绕过某些网络限制。
5. 文件上传(File Uploads)
requests
库支持上传文件。我们可以通过files
参数来上传文件。
示例:
import requests
# 准备文件
files = {'file': open('report.xls', 'rb')}
# 上传文件
response = requests.post('https://httpbin.org/post', files=files)
print(response.text)
在这个示例中,我们上传了一个名为report.xls
的文件。服务器会返回上传文件的相关信息。
6. 流式请求(Streaming Requests)
对于大文件或需要实时处理的响应,我们可以使用流式请求。这样可以避免一次性加载大量数据到内存中。
示例:
import requests
# 流式请求
response = requests.get('https://httpbin.org/stream/20', stream=True)
# 逐行读取响应内容
for line in response.iter_lines():
if line:
print(line)
在这个示例中,我们发送了一个流式请求,并逐行读取响应内容。这样可以有效地处理大文件或实时数据流。
7. 自定义身份验证(Custom Authentication)
requests
库支持自定义身份验证。我们可以通过继承requests.auth.AuthBase
类来实现自定义的身份验证逻辑。
示例:
import requests
from requests.auth import AuthBase
# 自定义身份验证类
class TokenAuth(AuthBase):
def __init__(self, token):
self.token = token
def __call__(self, r):
r.headers['Authorization'] = f'Bearer {self.token}'
return r
# 使用自定义身份验证发送请求
response = requests.get('https://httpbin.org/get', auth=TokenAuth('my-token'))
print(response.text)
在这个示例中,我们定义了一个名为TokenAuth
的自定义身份验证类,并在发送请求时使用了这个类。这样可以灵活地实现各种身份验证逻辑。
8. 处理Cookies
requests
库提供了方便的方法来处理Cookies。我们可以获取、设置和删除Cookies。
示例:
import requests
# 创建一个会话对象
session = requests.Session()
# 设置一个cookie
session.get('https://httpbin.org/cookies/set/sessioncookie/123456789')
# 获取所有cookies
cookies = session.cookies
print(cookies)
# 删除一个cookie
cookies.clear_expired_cookies()
print(cookies)
在这个示例中,我们通过会话对象设置了一个cookie,并获取和删除了cookies。这样可以方便地管理会话状态。
9. 处理SSL证书验证
requests
库默认会验证SSL证书。我们可以通过verify
参数来控制是否验证SSL证书。
示例:
import requests
# 禁用SSL证书验证
response = requests.get('https://httpbin.org', verify=False)
print(response.text)
在这个示例中,我们禁用了SSL证书验证。这样可以方便地测试不安全的HTTPS站点,但需要注意安全风险。
10. 自定义适配器(Custom Adapters)
requests
库允许我们自定义适配器,以实现更复杂的请求逻辑。我们可以通过继承requests.adapters.HTTPAdapter
类来实现自定义的适配器。
示例:
import requests
from requests.adapters import HTTPAdapter
# 自定义适配器
class MyAdapter(HTTPAdapter):
def send(self, request, **kwargs):
print(f'Sending request to {request.url}')
return super().send(request, **kwargs)
# 创建一个会话对象,并使用自定义适配器
session = requests.Session()
session.mount('https://', MyAdapter())
# 发送请求
response = session.get('https://httpbin.org/get')
print(response.text)
在这个示例中,我们定义了一个名为MyAdapter
的自定义适配器,并在会话对象中使用了这个适配器。这样可以方便地实现自定义的请求逻辑。
标签:
相关文章
最新发布
- 【Python】selenium安装+Microsoft Edge驱动器下载配置流程
- Python 中自动打开网页并点击[自动化脚本],Selenium
- Anaconda基础使用
- 【Python】成功解决 TypeError: ‘<‘ not supported between instances of ‘str’ and ‘int’
- manim边学边做--三维的点和线
- CPython是最常用的Python解释器之一,也是Python官方实现。它是用C语言编写的,旨在提供一个高效且易于使用的Python解释器。
- Anaconda安装配置Jupyter(2024最新版)
- Python中读取Excel最快的几种方法!
- Python某城市美食商家爬虫数据可视化分析和推荐查询系统毕业设计论文开题报告
- 如何使用 Python 批量检测和转换 JSONL 文件编码为 UTF-8
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Python与PyTorch的版本对应
- Anaconda版本和Python版本对应关系(持续更新...)
- Python pyinstaller打包exe最完整教程
- Could not build wheels for llama-cpp-python, which is required to install pyproject.toml-based proj