位置: 文档库 > Python > Requests库在Python中的用法

Requests库在Python中的用法

星移斗转 上传于 2021-10-31 14:20

《Requests库在Python中的用法》

在Python编程中,网络请求是获取外部数据、与API交互或实现爬虫功能的核心操作。虽然Python标准库中的`urllib`提供了基础的网络请求功能,但其复杂的API设计和繁琐的编码处理让开发者望而却步。而第三方库`Requests`凭借其简洁的接口、强大的功能和人性化的设计,迅速成为Python社区中最受欢迎的HTTP库之一。本文将系统介绍Requests库的核心用法,涵盖基础请求、参数传递、会话管理、高级功能及实际应用场景,帮助读者快速掌握这一工具。

一、Requests库简介

Requests库由Kenneth Reitz于2011年开发,旨在简化HTTP请求的编写过程。它基于Python标准库的`urllib3`构建,但通过封装提供了更直观的API。与`urllib`相比,Requests无需手动处理URL编码、JSON解析或会话保持,开发者只需几行代码即可完成复杂的网络操作。其核心特性包括:

  • 支持所有HTTP方法(GET、POST、PUT、DELETE等)

  • 自动处理URL编码和表单数据

  • 内置JSON解析和响应内容处理

  • 会话对象支持Cookie和连接池

  • 超时设置、重定向控制和身份验证

二、安装与基础环境

Requests库可通过pip直接安装,兼容Python 2.7和3.5+版本。安装命令如下:

pip install requests

安装完成后,可通过导入库验证是否成功:

import requests
print(requests.__version__)

三、基础请求方法

1. GET请求

GET请求用于从服务器获取数据,是最常用的HTTP方法。Requests通过`requests.get()`实现,基本语法如下:

response = requests.get(url, params=None, **kwargs)

其中`url`为目标地址,`params`为查询参数(字典形式),`**kwargs`支持其他可选参数(如超时、认证等)。

示例1:基础GET请求

import requests

url = "https://httpbin.org/get"
response = requests.get(url)
print(response.status_code)  # 输出状态码200
print(response.text)        # 输出响应内容

示例2:带参数的GET请求

params = {"key1": "value1", "key2": "value2"}
response = requests.get("https://httpbin.org/get", params=params)
print(response.url)  # 输出带参数的完整URL

2. POST请求

POST请求用于向服务器提交数据,常用于表单提交或API调用。Requests通过`requests.post()`实现,支持多种数据格式:

response = requests.post(url, data=None, json=None, **kwargs)

`data`参数用于提交表单数据(字典或字节流),`json`参数自动将字典序列化为JSON并设置`Content-Type: application/json`。

示例3:表单数据提交

data = {"username": "admin", "password": "123456"}
response = requests.post("https://httpbin.org/post", data=data)
print(response.json())  # 解析JSON响应

示例4:JSON数据提交

json_data = {"name": "John", "age": 30}
response = requests.post("https://httpbin.org/post", json=json_data)
print(response.headers["Content-Type"])  # 输出application/json

3. 其他HTTP方法

Requests还支持PUT、DELETE、HEAD等HTTP方法,用法与GET/POST类似:

# PUT请求示例
requests.put("https://httpbin.org/put", data={"key": "value"})

# DELETE请求示例
requests.delete("https://httpbin.org/delete")

# HEAD请求示例
requests.head("https://httpbin.org/get")

四、响应对象处理

Requests返回的响应对象(`Response`)包含服务器返回的所有信息,可通过以下属性访问:

  • `status_code`:HTTP状态码(如200、404)

  • `headers`:响应头(字典形式)

  • `text`:响应内容(字符串形式)

  • `content`:响应内容(字节流形式)

  • `json()`:解析JSON响应为字典

示例5:响应对象操作

response = requests.get("https://api.github.com")
print(response.status_code)  # 200
print(response.headers["Content-Type"])  # application/json
print(response.text[:50])  # 输出前50个字符
print(response.json()["current_user_url"])  # 解析JSON字段

五、高级功能

1. 会话管理(Session)

会话对象(`Session`)用于在多个请求间保持Cookie和连接池,避免重复设置头部或认证信息。创建会话后,所有请求将自动共享会话状态。

示例6:会话对象使用

with requests.Session() as session:
    session.headers.update({"User-Agent": "MyApp/1.0"})
    response1 = session.get("https://httpbin.org/get")
    response2 = session.post("https://httpbin.org/post", data={"key": "value"})
    print(response1.text)
    print(response2.text)

2. 超时设置

通过`timeout`参数可设置连接和读取的超时时间(秒),避免程序因网络问题无限等待。

try:
    response = requests.get("https://httpbin.org/delay/3", timeout=2)
except requests.exceptions.Timeout:
    print("请求超时!")

3. 身份验证

Requests支持基本认证(Basic Auth)和摘要认证(Digest Auth),通过`auth`参数传递认证信息。

示例7:基本认证

from requests.auth import HTTPBasicAuth

response = requests.get(
    "https://httpbin.org/basic-auth/user/pass",
    auth=HTTPBasicAuth("user", "pass")
)

4. 代理设置

通过`proxies`参数可配置HTTP/HTTPS代理,适用于爬虫或访问受限资源。

proxies = {
    "http": "http://10.10.1.10:3128",
    "https": "http://10.10.1.10:1080",
}
response = requests.get("https://httpbin.org/ip", proxies=proxies)

六、实际应用场景

1. 爬取网页内容

结合`BeautifulSoup`或`lxml`,Requests可实现简单的网页爬取。

import requests
from bs4 import BeautifulSoup

url = "https://example.com"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")
titles = soup.find_all("h1")
for title in titles:
    print(title.text)

2. 调用RESTful API

大多数API使用JSON格式交互,Requests的`json`参数和响应解析功能极大简化了开发。

api_url = "https://api.example.com/users"
data = {"name": "Alice", "email": "alice@example.com"}
response = requests.post(api_url, json=data)
if response.status_code == 201:
    print("用户创建成功!")

3. 文件上传与下载

通过`files`参数可上传文件,通过流式响应可下载大文件。

示例8:文件上传

url = "https://httpbin.org/post"
files = {"file": open("report.xlsx", "rb")}
response = requests.post(url, files=files)

示例9:大文件下载

url = "https://example.com/large_file.zip"
response = requests.get(url, stream=True)
with open("downloaded.zip", "wb") as f:
    for chunk in response.iter_content(chunk_size=8192):
        f.write(chunk)

七、常见问题与调试

1. SSL证书验证

默认情况下,Requests会验证SSL证书。若需禁用验证(不推荐),可设置`verify=False`:

response = requests.get("https://example.com", verify=False)

2. 调试请求

通过`requests.request()`的`verbose`参数或日志模块可输出详细请求信息。

import logging
logging.basicConfig(level=logging.DEBUG)
response = requests.get("https://example.com")

3. 性能优化

使用会话对象、连接池和持久化Cookie可提升性能。对于高频请求,建议复用会话而非创建新对象。

八、总结

Requests库凭借其简洁的API、强大的功能和良好的扩展性,成为Python网络编程的首选工具。无论是简单的GET请求、复杂的API调用,还是爬虫开发,Requests都能提供高效的解决方案。通过掌握本文介绍的核心用法和高级技巧,开发者可以更专注于业务逻辑,而非底层网络细节。

关键词:Requests库、Python网络请求、HTTP方法、会话管理、JSON解析、爬虫开发、API调用、超时设置、身份验证、代理配置

简介:本文系统介绍了Python中Requests库的核心用法,涵盖基础请求方法(GET/POST)、响应对象处理、会话管理超时设置、身份验证等高级功能,并结合实际应用场景(如爬虫开发、API调用)提供代码示例,帮助读者快速掌握这一高效网络请求工具。

《Requests库在Python中的用法.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档