以前做视频的网站,网站建设多少钱个人,手机软件大全,室内设计师网站有哪些requests 是一个流行的 Python 库#xff0c;用于发送 HTTP 请求。它提供了简洁而友好的 API#xff0c;使得发送 HTTP 请求变得简单而直观。requests 具有许多强大的功能#xff0c;适用于各种 HTTP 请求场景#xff0c;包括 GET、POST、PUT、DELETE 等。 目录 requests 库…requests 是一个流行的 Python 库用于发送 HTTP 请求。它提供了简洁而友好的 API使得发送 HTTP 请求变得简单而直观。requests 具有许多强大的功能适用于各种 HTTP 请求场景包括 GET、POST、PUT、DELETE 等。 目录 requests 库的主要特点和使用示例requests 相关配置项什么时候设置 streamTrue如何设置连接池HTTPAdapter详解max_retries3时多久会报超时 requests 库的主要特点和使用示例
安装 你可以使用 pip 安装 requests
pip install requests发送 GET 请求
import requestsresponse requests.get(https://www.example.com)
print(response.text)发送 POST 请求
import requestsdata {key1: value1, key2: value2}
response requests.post(https://www.example.com/post-endpoint, datadata)
print(response.text)处理 JSON 响应
import requestsresponse requests.get(https://api.example.com/data)
json_data response.json()设置请求头
import requestsheaders {User-Agent: MyApp/1.0}
response requests.get(https://www.example.com, headersheaders)处理响应状态码和异常
import requests
try:response requests.get(https://www.example.com)response.raise_for_status() # 抛出 HTTPError 异常如果响应状态码不是 2xx
except requests.exceptions.HTTPError as err:print(fHTTP Error: {err})传递 URL 查询参数
import requestsparams {key1: value1, key2: value2}
response requests.get(https://www.example.com, paramsparams)处理响应流Streaming
import requestswith requests.get(https://www.example.com/large_file.zip, streamTrue) as response:with open(large_file.zip, wb) as file:for chunk in response.iter_content(chunk_size128):file.write(chunk)使用 Session
import requestswith requests.Session() as session:session.get(https://www.example.com/login, params{user: username, password: password})response session.get(https://www.example.com/dashboard)文件上传
import requestsfiles {file: (filename.txt, open(filename.txt, rb))}
response requests.post(https://www.example.com/upload, filesfiles)requests 是一个功能强大且易于使用的库适用于各种网络请求场景。通过上述示例你可以看到它提供了简单而灵活的 API用于处理 HTTP 请求和响应。
requests 相关配置项
params
用于向 URL 中传递查询参数的字典或字节序列。例如params{‘key1’: ‘value1’, ‘key2’: ‘value2’}。
headers
用于设置请求头的字典包含了一些额外的信息如用户代理、认证信息等。例如headers{‘User-Agent’: ‘Mozilla/5.0’}。
data
发送 POST 请求时用于发送表单数据或 JSON 数据的字典、字节序列或文件。例如data{‘key1’: ‘value1’, ‘key2’: ‘value2’}。 json
发送 POST 请求时用于发送 JSON 数据的字典。requests 会自动将其转为 JSON 格式。例如json{‘key1’: ‘value1’, ‘key2’: ‘value2’}。
auth
用于设置 HTTP 基本认证的元组包含用户名和密码。例如auth(‘username’, ‘password’)。
cookies
用于发送请求时携带的 cookies 的字典。例如cookies{‘cookie1’: ‘value1’, ‘cookie2’: ‘value2’}。
timeout
用于设置请求超时时间以秒为单位。如果在指定时间内没有得到响应将引发 requests.Timeout 异常。例如timeout5。
allow_redirects
用于设置是否允许重定向默认为 True。如果设置为 False则禁止重定向。例如allow_redirectsFalse。
proxies
用于设置代理服务器的字典。例如proxies{‘http’: ‘http://proxy.example.com’, ‘https’: ‘https://proxy.example.com’}。
verify
用于设置是否验证 SSL 证书默认为 True。如果设置为 False将忽略 SSL 证书验证。例如verifyTrue。
stream
用于控制是否立即下载响应体默认为 False。如果设置为 True则可以逐块地处理响应体。例如streamTrue。
files
用于上传文件的字典包含文件名和文件内容。例如files{‘file’: (‘filename.txt’, open(‘filename.txt’, ‘rb’))}。
hooks
用于设置回调钩子函数的字典用于处理请求和响应。例如hooks{‘response’: callback_function}。
什么时候设置 streamTrue
在使用 Python 中的 requests 库时设置 streamTrue 通常适用于以下情况
下载大文件或数据流: 当你需要下载大型文件或处理数据流时使用 streamTrue 可以避免将整个响应体一次性加载到内存中而是逐块地处理响应体。 长时间运行的请求: 对于可能需要很长时间才能完成的请求使用 streamTrue 可以逐步获取响应而不需要等待整个响应完全下载才能开始处理数据。 逐块处理响应体: 如果你希望逐块处理响应体而不是等整个响应体下载完成可以使用 streamTrue 并通过 iter_content() 或 iter_lines() 方法逐块地获取响应体。 避免大内存占用: 当响应体非常大时将其一次性加载到内存中可能导致内存占用过大甚至引发 MemoryError。使用 streamTrue 可以有效地减小内存占用提高程序的稳定性。
如何设置连接池
在 Python 的 requests 库中可以通过定制 HTTPAdapter 来设置连接池的相关参数以控制 HTTP 连接的行为。
创建连接池
import requests
from requests.adapters import HTTPAdapter# 创建一个自定义的 HTTPAdapter
custom_adapter HTTPAdapter(pool_connections5, # 设置连接池的大小即最大同时保持的连接数pool_maxsize10, # 设置每个主机的最大连接数即每个目标主机允许保持的最大连接数pool_blockTrue, # 如果连接池达到最大容量并且没有可用连接设置为 True 时请求将会阻塞直到有可用的连接pool_timeout30 # 设置获取连接的超时时间单位为秒
)# 创建一个 Session并将自定义的 HTTPAdapter 添加到 Session
session requests.Session()
session.mount(http://, custom_adapter)
session.mount(https://, custom_adapter)# 使用带有自定义适配器的 Session 发送请求
response session.get(https://www.example.com)
print(response.text)HTTPAdapter详解
在 Python 的 requests 库中HTTPAdapter 是一个适配器类用于为 requests.Session 提供更灵活的 HTTP 连接池和持久性连接的配置。HTTPAdapter 允许你自定义 HTTP 连接的行为例如设置连接池的大小、设置连接的生存时间等。
以下是对 HTTPAdapter 的详细介绍
创建和使用 HTTPAdapter
import requests
from requests.adapters import HTTPAdapterurl https://www.example.com# 创建一个 Session
session requests.Session()# 创建一个自定义的 HTTPAdapter
adapter HTTPAdapter(max_retries3, pool_connections10, pool_maxsize10, pool_blockTrue)# 将自定义的 HTTPAdapter 添加到 Session
session.mount(http://, adapter)
session.mount(https://, adapter)# 使用带有自定义适配器的 Session 发送请求
response session.get(url)
print(response.text)HTTPAdapter 的主要参数和方法
max_retries 设置重试次数当请求失败时自动重试。默认为 0即不进行重试。pool_connections 设置连接池的大小即最大同时保持的连接数。pool_maxsize 设置每个主机的最大连接数即每个目标主机允许保持的最大连接数。pool_block 如果连接池达到最大容量并且没有可用连接设置为 True 时请求将会阻塞直到有可用的连接。设置为 False 时会引发 ConnectionError。默认为 True。pool_block 如果连接池达到最大容量并且没有可用连接设置为 True 时请求将会阻塞直到有可用的连接。设置为 False 时会引发 ConnectionError。默认为 True。pool_timeout 设置获取连接的超时时间单位为秒。close() 关闭适配器并关闭其所有的连接。
使用 HTTPAdapter 的好处
连接池控制 通过 HTTPAdapter 可以自定义连接池的大小和连接数以便更好地控制和优化 HTTP 连接的使用。重试机制 可以通过设置 max_retries 参数启用重试机制确保在发生连接错误时进行自动重试。持久性连接 可以通过适配器来实现持久性连接提高多次请求同一主机时的性能。定制化配置 可以通过适配器提供的参数来定制化配置以满足特定的请求需求。 使用 HTTPAdapter 可以使得请求更加灵活和可定制特别是在处理大量请求、需要精细控制连接的情况下可以通过适配器来优化连接的管理。
max_retries3时多久会报超时
在 requests 中max_retries 参数用于设置在请求失败时的最大重试次数。重试时会等待一段时间再次尝试请求这个等待时间由 Retry 实例的 backoff_factor 和 total 参数控制。
默认情况下backoff_factor 是 0即每次重试之间的等待时间是固定的。如果设置了 backoff_factor则等待时间会指数增加以实现一种指数退避的效果。
import requests
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry# 创建一个自定义的 Retry 实例设置最大重试次数为 3backoff_factor 为 1
retry Retry(total3, backoff_factor1)# 创建一个自定义的 HTTPAdapter使用自定义的 Retry 实例
custom_adapter HTTPAdapter(max_retriesretry)# 创建一个 Session并将自定义的 HTTPAdapter 添加到 Session
session requests.Session()
session.mount(http://, custom_adapter)
session.mount(https://, custom_adapter)url https://www.example.com# 使用带有自定义适配器的 Session 发送请求
try:response session.get(url, timeout5) # 设置超时时间为 5 秒response.raise_for_status()print(response.text)
except requests.exceptions.RequestException as e:print(f请求失败: {e})