Python第三方requests库Response对象详解(4/6)

Response对象

requests.Response

用于表示从远程服务器收到的响应。

当你用request.get()、requests.post()等HTTP请求时,这些方法会返回一个Response对象,该对象包含了服务器返回的所有信息。

Response对象方法

1、json(**kwargs)

用于解析响应内容为JSON格式的方法。

它将响应内容解析为Python字典或列表,具体的数据结构取决于JSON内容的格式。

该方法的参数 **kwargs 允许你传递额外的参数,这些参数会传递给 json.loads() 函数,用于自定义 JSON 解析过程。这包括但不限于:

encoding: 指定 JSON 字符串的编码。默认为 None,表示自动检测编码。

cls: 用于指定一个自定义的 JSON 解码器类。

object_hook: 如果提供,它将被用于将 JSON 对象转换为 Python 对象。

parse_float, parse_int, parse_constant: 用于指定如何处理 JSON 中的浮点数、整数和特殊常量。

引发:如果响应内容不包含json格式内容将引发ValueError错误.

例:

import requests

url = ‘https://jsonplaceholder.typicode.com/todos/1’

response = requests.get(url)

# 解析响应内容为 JSON

json_data = response.json()

# 输出解析后的数据

print(“JSON Data:”)

print(json_data)

# 获取特定键的值

title = json_data.get(‘title’, ‘N/A’)

print(“Title:”, title)

输出:

JSON Data:

{‘userId’: 1, ‘id’: 1, ‘title’: ‘delectus aut autem’, ‘completed’: False}

Title: delectus aut autem

在这个例子中,response.json()方法将响应内容解析为JSON格式,返回一个对应的Python字典。然后,可以通过字典操作获取特定键的值。

请注意,如果响应的内容不是合法的JSON格式(必须整个response内容都是json格式),或者无法解析为字典或列表,response.json()方法可能会抛出json.JSONDecodeError异常。

2、iter_content(chunk_size=1, decode_unicode=False)

用于逐块迭代响应内容的方法。这个方法适用于处理大型响应内容,例如下载文件时。

当在请求上设置stream=True时,这可以防止内容一次性读取到内存中。

参数:

chunk_size:这个参数定义了每次迭代返回的数据块的大小(以字节为单位)。设置较小的chunk_size可以有效地处理大型文件,因为它允许你逐步加载文件而不会一次性加载整个文件到内存中。

decode_unicode:这个参数用于控制是否对字节数据进行解码成Unicode。如果设置为False,返回的数据将是原始的字节数据;如果设置为True,则requests将尝试将字节数据解码成Unicode。

示例:

import requests

url = ‘ https://tms.cheoa.cn/assets/images/login_bg_small.jpeg’

response = requests.get(url, stream=True)

# 按块迭代响应内容

chunk_size = 1024  # 1KB

for chunk in response.iter_content(chunk_size=chunk_size, decode_unicode=False):

    # 处理每个数据块,这里只是简单地输出块大小

    print(f”Received chunk of size {len(chunk)} bytes”)

# 关闭连接

response.close()

输出:

Received chunk of size 1024 bytes

Received chunk of size 1024 bytes

…略

Received chunk of size 1024 bytes

Received chunk of size 305 bytes

3、iter_lines(chunk_size=512, decode_unicode=None, delimiter=None)

用于按行迭代响应内容。

这个方法适用于处理文本响应,允许你逐行处理响应内容,而不必将整个响应加载到内存中。

当在请求上设置stream=True时,这可以防止内容一次性读取到内存中。

参数:

chunk_size: 这个参数定义了每次迭代返回的数据块的大小(以字节为单位)。设置较小的 chunk_size 可以有效地处理大型文本响应,因为它允许你逐步加载内容而不会一次性加载整个响应到内存中。

decode_unicode: 这个参数用于控制是否对字节数据进行解码成 Unicode。如果设置为 False,返回的数据将是原始的字节数据;如果设置为 True,则 requests 将尝试将字节数据解码成 Unicode。如果设置为 None(默认值),requests 将根据响应头中的编码信息自动解码。

delimiter: 这个参数用于指定行的分隔符。如果不提供分隔符,iter_lines 将使用默认的分隔符,即 ‘\n’。

注解

This method is not reentrant safe.

示例:

import requests

url = ‘https://www.example.com/large_text_file.txt’

response = requests.get(url, stream=True)

# 按行迭代响应内容

for line in response.iter_lines(chunk_size=512, decode_unicode=True):

    # 处理每行数据,这里只是简单地输出每行内容

    print(line)

# 关闭连接

response.close()

作者:坑里技术员

物联沃分享整理
物联沃-IOTWORD物联网 » Python第三方requests库Response对象详解(4/6)

发表回复