Python Requests库详解:从基础用法到高级封装实战

Finn
Finn
发布时间:2026-10-12 | 2人浏览过
原创

本文深入解析Python中流行的HTTP请求库Requests。内容涵盖安装导入、GET与POST请求的具体发送方式、响应状态码及异常处理机制。同时介绍请求头、Cookie设置、超时控制及代理配置等高级特性,并提供一个封装好的Request类示例,帮助开发者简化日常API交互开发流程。

在当前软件开发生态中,与Web服务进行数据交互已成为基础需求。无论是开发API接口、编写网络爬虫还是执行自动化测试,向服务器发送HTTP请求并解析响应数据都是核心环节。Python凭借强大的功能和易用性,提供了多种处理HTTP请求的库,其中Requests库因其简洁的设计而备受推崇。本文将系统介绍Requests库的基础操作及进阶技巧,助力读者高效利用该工具。

  • Requests库简介

Requests是一款设计优雅且简洁的Python HTTP客户端库,旨在简化HTTP请求的操作流程。借助该库,开发者可以轻松地发起GET、POST、PUT、DELETE等多种类型的HTTP请求,并便捷地处理服务器返回的数据。Requests遵循“人类可读”和“用户友好”的设计哲学,使开发者能够将精力集中在业务逻辑实现上,无需过多关注底层网络协议的复杂性。

  • 安装Requests库

要在Python环境中使用Requests库,首先需完成安装。可通过pip工具执行以下命令进行安装:

pip install requests

安装成功后,在Python代码中通过import requests语句即可引入Requests库。 以下是Requests库中常用方法及其功能的详细说明:

1. `r.status_code`:获取响应状态码,例如200代表成功,404代表未找到资源等。 2. `r.content`:以字节形式获取响应体,该属性会自动处理gzip和deflate压缩。 3. `r.headers`:以字典形式存储服务器返回的响应头信息,若指定键不存在则返回None。 4. `r.json()`:Requests内置的JSON解析方法,可将响应体解析为Python字典或列表。 5. `r.url`:获取当前请求的完整URL。 6. `r.encoding`:获取响应的编码格式。 7. `r.cookies`:获取响应中携带的cookie信息。 8. `r.raw`:返回原始响应体数据。 9. `r.text`:以字符串形式获取响应体,会根据响应头中的字符编码自动进行解码。 10. `r.raise_for_status()`:若请求失败(即状态码非200系列),则抛出异常。

使用Requests库的基本流程如下:

1. 导入requests库:`import requests` 2. 发送请求:`r = requests.get(url)` 或 `r = requests.post(url, data=data)` 等。 3. 获取响应状态码:`r.status_code` 4. 获取响应内容:`r.content` 或 `r.text` 5. 获取响应头:`r.headers` 6. 解析响应体为JSON:`r.json()` 7. 获取请求的URL:`r.url` 8. 获取响应的编码格式:`r.encoding` 9. 获取响应中的cookie:`r.cookies` 10. 获取原始响应体:`r.raw` 11. 如果请求失败,抛出异常:`r.raise_for_status()`

  • 发送GET请求

GET请求是获取服务器资源最常用的HTTP方法。使用Requests库发送GET请求十分简便,只需调用requests.get()函数并传入目标URL即可。以下是一个简单的示例:

import requests

url = 'https://www.baidu.com'
response = requests.get(url)

print(response.text)

在上述示例中,我们向https://www.baidu.com发起了GET请求,并打印了响应内容。需要注意的是,response.text属性包含了服务器返回的原始文本数据。若响应内容为JSON格式,可调用response.json()方法将其解析为Python对象以便进一步处理。

  • 发送POST请求

POST请求主要用于向服务器提交数据,常用于创建新资源或更新现有资源。使用Requests库发送POST请求同样简单,只需调用requests.post()函数并传入URL及数据参数。以下是一个简单的示例:

import requests

data = {'wd': 'Python'}
response = requests.post('https://www.baidu.com/s', data=data)

print(response.text)

在此示例中,我们向https://www.baidu.com/s发送了POST请求,并将数据以字典形式传递给data参数。需要注意的是,POST请求的数据通常以表单或JSON格式提交,可通过设置headers参数来指定数据格式。例如,若需以JSON格式提交数据,可将headers设置为{'Content-Type': 'application/json'}。

  • 处理响应状态码和异常

在发送HTTP请求时,关注服务器返回的状态码至关重要,这有助于判断请求是否成功以及如何处理潜在错误。Requests库提供了多种便捷方法来处理状态码和异常。以下是常用方法:

  • response.status_code:获取响应的状态码。例如,状态码200表示请求成功;状态码404表示资源未找到。
  • response.raise_for_status():若响应状态码表示错误(非2xx系列),则抛出异常。这有助于及时发现并处理错误情况。例如:
response = requests.get('https://www.baidu.com')
response.raise_for_status()  # 如果状态码不是2xx,抛出异常
  • 设置请求头和Cookies

在某些场景下,需要在HTTP请求中设置特定的请求头或Cookies。Requests库提供了相应的方法来实现这一功能。以下是常用方法:

  • requests.get(url, headers={'User-Agent': 'Mozilla/5.0'}):在GET请求中设置请求头。例如,我们可以设置User-Agent来模拟不同的浏览器或设备。
  • requests.get(url, cookies={'session': '123456789'}):在GET请求中设置Cookies。例如,我们可以使用会话ID来保持用户登录状态。
  • requests.post(url, data=data, headers={'Content-Type': 'application/json'}, cookies={'session': '123456789'}):在POST请求中设置请求头和Cookies。例如,我们可以同时设置数据格式和会话ID。
  • 超时和重试机制

发送HTTP请求时,可能会遇到网络延迟或服务器故障导致请求失败。为提高程序的健壮性,可利用Requests库提供的超时和重试机制。以下是常用方法:

  • requests.get(url, timeout=5):设置GET请求的超时时间为5秒。若超过5秒仍未收到响应,将抛出异常。
  • requests.Session().mount('http://', requests_retry.Retry()):使用重试机制来处理HTTP请求。例如,我们可以使用requests_retry库来实现自动重试功能。具体使用方法可参考该库的官方文档。
  • 其他高级特性

除上述基本用法外,Requests库还提供了许多高级特性,如代理支持、身份验证、文件上传等。这些特性有助于更灵活地应对各种HTTP场景。以下是常用的高级特性:

  • requests.get(url, proxies={'http': 'http://user:password@proxy:port', 'https': 'https://user:password@proxy:port'}):使用代理服务器发送HTTP请求。例如,我们可以利用代理服务器绕过网络限制或提升访问速度。
  • 封装requests公共方法
import requests

class Request:
    def requests_api(self, url, data=None, json=None, headers=None, cookies=None, method="get"):
        if method == "get":
            r = requests.get(url, data=data, json=json, headers=headers, cookies=cookies)
        elif method == "post":
            r = requests.post(url, data=data, json=json, headers=headers, cookies=cookies)

        code = r.status_code
        try:
            body = r.json()
        except Exception as e:
            body = r.text
        res = dict()
        res["code"] = code
        res["body"] = body
        return res
    def get(self, url, **kwargs):
        return self.requests_api(url, method="get", **kwargs)
    def post(self, url, **kwargs):
        return self.requests_api(url, method="post", **kwargs)
  • 该类旨在封装requests库中的get和post方法,使发送HTTP请求更加便捷。通过调用get或post方法,可向指定URL发送GET或POST请求,并获取响应的状态码及内容。
  • 在requests_api方法中,根据传入的method参数选择调用requests.get或requests.post方法发送请求。随后,将响应的状态码存储在变量code中,并尝试将响应内容解析为JSON格式;若解析失败,则使用原始文本作为响应内容。最后,将状态码和响应内容存储于字典中,并返回该字典作为结果。
  • 此外,get和post方法均通过调用requests_api方法实现,分别传入不同的HTTP方法参数(“get”或“post”),并将其他参数传递给requests_api方法。这样,用户可通过调用这两个方法来发送不同类型的HTTP请求。

至此,关于Python中HTTP请求库Requests的具体使用介绍完毕。如需了解更多Python Requests相关内容,请搜索本站往期文章或继续浏览后续相关文章。感谢大家的支持!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表