当前位置:首页 > Python > 正文

Python Requests读取服务器响应教程 - 详细步骤与代码示例

Python Requests库读取服务器响应教程

Requests是Python中最受欢迎的HTTP库之一,它简化了发送HTTP请求和处理响应的过程。本教程将详细介绍如何使用requests库发送HTTP请求并读取服务器返回的各种类型响应。

1. 安装requests库

在开始之前,需要先安装requests库。可以使用pip进行安装:

pip install requests

安装完成后,可以在Python脚本中导入requests库:

import requests

2. 发送GET请求

使用requests发送GET请求非常简单:

response = requests.get('https://api.example.com/data')

这个请求会返回一个Response对象,包含服务器返回的所有信息。

3. 读取响应内容

获取响应内容的最简单方法是使用.text属性:

print(response.text)

Requests会自动解码来自服务器的内容,可以使用response.encoding查看当前编码:

print(response.encoding)  # 查看当前编码
response.encoding = 'utf-8'  # 设置编码

4. 处理响应状态码

检查HTTP响应状态码:

print(response.status_code)  # 输出状态码,例如200

# 状态码检查的简便方法
if response.status_code == 200:
    print("请求成功!")
elif response.status_code == 404:
    print("页面未找到!")

requests库还提供了更简洁的状态码检查方法:

if response.ok:  # 检查状态码是否在200-400之间
    print("请求成功!")

5. 读取响应头信息

服务器响应头包含重要的元数据:

# 获取所有响应头信息
print(response.headers)

# 获取特定响应头
print(response.headers['Content-Type'])
print(response.headers.get('Content-Type'))  # 更安全的方式,避免KeyError

6. 处理JSON响应

对于JSON格式的响应,可以使用.json()方法解析:

data = response.json()
print(data['key'])  # 访问JSON数据

完整的JSON请求处理示例:

import requests

url = "https://api.github.com/users/octocat"
response = requests.get(url)

if response.status_code == 200:
    user_data = response.json()
    print(f"用户名: {user_data['login']}")
    print(f"姓名: {user_data['name']}")
    print(f"关注者: {user_data['followers']}")
else:
    print(f"请求失败,状态码: {response.status_code}")

7. 处理二进制响应

对于非文本内容(如图片、文件),使用.content属性:

# 下载图片示例
response = requests.get('https://example.com/image.jpg')

if response.status_code == 200:
    with open('image.jpg', 'wb') as f:
        f.write(response.content)
    print("图片下载成功")
else:
    print(f"下载失败,状态码: {response.status_code}")

8. 错误处理

使用try-except块处理请求过程中可能发生的异常:

try:
    response = requests.get('https://api.example.com/data', timeout=5)
    response.raise_for_status()  # 如果状态码不是200,抛出HTTPError异常
    # 处理响应数据
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}")

9. 处理重定向

Requests默认会跟随重定向,可以通过allow_redirects参数控制:

# 禁止重定向
response = requests.get('http://github.com', allow_redirects=False)
print(response.status_code)  # 301

# 查看重定向历史
response = requests.get('http://github.com')
print(response.history)  # 显示重定向链
print(response.url)      # 最终URL

10. 总结

Python的requests库提供了简洁而强大的API来处理HTTP请求和响应。本教程涵盖了:

  • 安装requests库
  • 发送GET请求
  • 读取文本、JSON和二进制响应
  • 处理状态码和响应头
  • 错误处理
  • 重定向处理

使用requests库,你可以轻松地与各种Web服务和API进行交互,获取和处理服务器响应数据。

最佳实践提示: 始终包含错误处理代码;对于长时间运行的请求设置超时;检查响应状态码;处理可能的重定向;当处理用户数据时考虑隐私和安全。

完整示例:API请求与处理

import requests

def fetch_user_data(username):
    url = f"https://api.github.com/users/{username}"
    try:
        response = requests.get(url, timeout=10)
        response.raise_for_status()  # 检查HTTP错误
        
        user_data = response.json()
        return {
            'username': user_data['login'],
            'name': user_data.get('name', '未提供'),
            'bio': user_data.get('bio', '无简介'),
            'public_repos': user_data['public_repos'],
            'followers': user_data['followers']
        }
    except requests.exceptions.HTTPError as err:
        print(f"HTTP错误: {err}")
    except requests.exceptions.RequestException as err:
        print(f"请求错误: {err}")
    return None

# 使用示例
user_info = fetch_user_data("octocat")
if user_info:
    print(f"用户信息: {user_info}")

进一步学习资源

发表评论