杰瑞科技汇

Python response 对象有哪些常用属性和方法?

response 对象并不是 Python 的内置对象,而是特指在使用 HTTP 请求库(最常见的是 requests 库)向服务器发送请求后,服务器返回的那个响应对象,这个对象包含了服务器对请求的完整回答

Python response 对象有哪些常用属性和方法?-图1
(图片来源网络,侵删)

你可以把它想象成一封寄出的信收到的回信,这封回信(response 对象)不仅包含了你想要的内容(信纸上的文字),还包含了信封上的所有信息(发件人、收件人、邮戳、邮票等)。


response 对象的来源

当你使用 requests 库时,通常会这样做:

import requests
# 1. 发送一个 GET 请求到指定的 URL
url = 'https://www.example.com'
response = requests.get(url) # response 就是我们说的响应对象
# 2. 现在可以通过 response 对象获取服务器的各种信息

response 对象的核心属性和方法

response 对象提供了丰富的属性和方法,让你可以方便地解析和使用服务器的响应,以下是其中最重要和最常用的几个:

属性/方法 描述 示例
response.status_code HTTP 状态码,表示请求的结果是否成功。 200 (成功), 404 (未找到), 500 (服务器错误)
response.text 以字符串形式返回响应体内容,会自动根据 headersContent-Typerequests 推测的编码进行解码。 response.text
response.content 以字节形式返回响应体内容,这对于处理非文本内容(如图片、音频、PDF)非常重要,因为它不会进行解码。 response.content
response.json() 如果响应体是有效的 JSON 格式,此方法会将其解析为 Python 的字典或列表,如果响应不是 JSON,会抛出 JSONDecodeError data = response.json()
response.headers 一个类字典的对象,包含了服务器响应的头部信息。 response.headers['Content-Type']
response.url 最终请求的 URL,如果发生了重定向,这个值会是重定向后的最终 URL。 response.url
response.history 一个包含所有重定向请求的 response 对象的列表(如果发生了重定向)。 for r in response.history: print(r.url)
response.encoding 从 HTTP 头部中猜测的响应编码,你可以手动修改它来正确解码文本。 response.encoding = 'utf-8'
response.reason HTTP 状态码对应的文本原因短语。 'OK', 'Not Found'
response.cookies 一个 RequestsCookieJar 对象,包含了服务器返回的 cookies。 response.cookies.get('cookie_name')

代码示例与实践

让我们通过几个例子来直观地理解这些属性。

Python response 对象有哪些常用属性和方法?-图2
(图片来源网络,侵删)

示例 1:获取网页内容并检查状态码

import requests
try:
    # 发送 GET 请求
    response = requests.get('https://httpbin.org/get')
    # 检查请求是否成功 (状态码为 200)
    if response.status_code == 200:
        print(f"请求成功!状态码: {response.status_code}")
        print(f"响应头: {response.headers}")
        print(f"响应内容类型: {response.headers['Content-Type']}")
        # 获取并打印文本内容
        print("\n--- 响应文本 (前 200 字符) ---")
        print(response.text[:200])
    else:
        print(f"请求失败,状态码: {response.status_code}, 原因: {response.reason}")
except requests.exceptions.RequestException as e:
    print(f"请求发生错误: {e}")

示例 2:处理 JSON 响应

很多现代 API 都会返回 JSON 格式的数据。response.json() 是处理这种情况的最佳方式。

import requests
import json # 虽然response.json()会自动处理,但也可以用json模块手动解析
# 一个返回 JSON 数据的 API 端点
url = 'https://httpbin.org/json'
try:
    response = requests.get(url)
    # 首先检查状态码
    response.raise_for_status() # 如果状态码不是 2xx,会抛出 HTTPError 异常
    # 使用 .json() 方法直接解析
    data = response.json()
    print("成功解析 JSON 数据:")
    # 现在可以像操作普通 Python 字典一样操作 data
    print(f"JSON 数据中的 'slideshow' 键: {data['slideshow']}")
    print(f"JSON 数据中的 'author' 键: {data['slideshow']['author']}")
    # 也可以手动解析 (不推荐,除非有特殊需求)
    # data_manual = json.loads(response.text)
    # print("\n手动解析的 JSON 数据中的 'author' 键:", data_manual['slideshow']['author'])
except requests.exceptions.HTTPError as errh:
    print(f"HTTP 错误: {errh}")
except requests.exceptions.ConnectionError as errc:
    print(f"连接错误: {errc}")
except requests.exceptions.Timeout as errt:
    print(f"请求超时: {errt}")
except requests.exceptions.RequestException as err:
    print(f"发生错误: {err}")

示例 3:下载二进制文件(如图片)

下载图片、PDF 等文件时,必须使用 response.content,并使用 wb (write binary) 模式写入文件。

import requests
# 图片的 URL
image_url = 'https://httpbin.org/image/png' # httpbin.org 提供一个示例图片
save_path = 'downloaded_image.png'
try:
    print(f"正在从 {image_url} 下载图片...")
    response = requests.get(image_url, stream=True) # 使用 stream=True 可以更高效地下载大文件
    # 再次检查状态码
    response.raise_for_status()
    # 以二进制写入模式打开文件
    with open(save_path, 'wb') as f:
        # iter_content 会分块读取内容,节省内存
        for chunk in response.iter_content(chunk_size=8192):
            f.write(chunk)
    print(f"图片已成功保存到 {save_path}")
except requests.exceptions.RequestException as e:
    print(f"下载图片时发生错误: {e}")

response 对象的生命周期

一个 response 对象的生命周期非常简单:

  1. 创建:当你调用 requests.get(), requests.post(), requests.put() 等方法时,requests 库会发送网络请求,并创建一个 Response 对象来封装服务器的所有响应信息。
  2. 使用:你通过访问其属性(如 .status_code, .text)或调用其方法(如 .json())来获取所需的信息。
  3. 销毁:当这个对象所在的代码块执行完毕,或者你不再需要它时,Python 的垃圾回收机制会自动回收它所占用的内存。

最佳实践:使用 with 语句(虽然 requestsresponse 对象本身不强制要求,但这是一个好习惯)或者确保在用完 response 后尽快关闭它,尤其是在处理流式数据或长时间运行的脚本时,可以释放资源,对于简单的脚本,通常不需要显式关闭。

Python response 对象有哪些常用属性和方法?-图3
(图片来源网络,侵删)

response 对象是 requests 库与服务器交互的核心,它是一个信息丰富的容器,包含了 HTTP 响应的方方面面:

  • 元数据:状态码、响应头、URL 等(通过 .status_code, .headers, .url 获取)。
  • 有效载荷:实际的数据内容,可以是文本、JSON、二进制数据等(通过 .text, .json(), .content 获取)。

掌握如何使用 response 对象是进行 Python Web 开发、爬虫、API 调用等任务的基础,在访问响应内容之前,总是先检查 response.status_code,这是健壮代码的关键一步。

分享:
扫描分享到社交APP
上一篇
下一篇