「Python系列」Python requests模块

简介: `requests` 是一个用 Python 语言编写的,用于发送 HTTP 请求的库。它使得发送 HTTP 请求变得简单,无需手动添加查询字符串到你的 URL 中,或者手动处理表单的编码。`requests` 会自动为你处理这些事情。

一、Python requests模块

requests 是一个用 Python 语言编写的,用于发送 HTTP 请求的库。它使得发送 HTTP 请求变得简单,无需手动添加查询字符串到你的 URL 中,或者手动处理表单的编码。requests 会自动为你处理这些事情。

以下是一些使用 requests 发送 HTTP 请求的基本示例:

1. 安装 requests

首先,你需要安装 requests 库。如果你还没有安装,可以使用 pip 来安装:

pip install requests

2. 发送 GET 请求

import requests

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

3. 发送 POST 请求

import requests

data = {
   'key1': 'value1', 'key2': 'value2'}
response = requests.post('https://api.example.com/data', data=data)
print(response.text)

4. 设置请求头

在 Python 的 requests 库中,你可以通过传递一个字典给 headers 参数来自定义请求头。这个字典应该包含你想要设置的 HTTP 头部的名称和值。下面是一个如何自定义请求头的示例:

import requests

headers = {
   
    'User-Agent': 'my-app/0.0.1',
    'Accept': 'application/json',
    'Authorization': 'Bearer your-token-here',
    'Custom-Header': 'CustomValue'
}

response = requests.get('http://example.org', headers=headers)

print(response.text)

在这个例子中,我们创建了一个名为 headers 的字典,其中包含四个自定义的 HTTP 头部:

  • User-Agent: 用来标识发送请求的客户端应用程序。
  • Accept: 告诉服务器客户端希望接收的响应内容的类型。
  • Authorization: 用于身份验证,这里是一个常见的使用 Bearer token 的例子。
  • Custom-Header: 一个自定义的头部,你可以根据需要添加任意数量和类型的自定义头部。

然后,我们将这个 headers 字典作为参数传递给 requests.get() 方法的 headers 参数。这样,requests 就会使用这些自定义的头部来发送 HTTP 请求。

同样的方法也适用于 requests.post(), requests.put(), requests.delete() 等其他 HTTP 方法。

如果你需要频繁地发送带有相同头部的请求,可以考虑使用 requests.Session 对象来创建一个会话,并在会话级别设置头部:

import requests

s = requests.Session()

headers = {
   
    'User-Agent': 'my-app/0.0.1',
    'Accept': 'application/json',
    'Authorization': 'Bearer your-token-here'
}

s.headers.update(headers)

response = s.get('http://example.org')

print(response.text)

在这个例子中,我们创建了一个 requests.Session 对象,并使用 s.headers.update(headers) 方法来更新会话的默认头部。这样,在该会话中发送的所有请求都会自动包含这些头部。

5. 处理 JSON 数据

import requests

response = requests.get('https://api.example.com/data')
data = response.json()  # 自动将 JSON 响应内容解析为 Python 对象
print(data)

6. 错误处理

import requests
from requests.exceptions import RequestException

try:
    response = requests.get('https://api.example.com/data', timeout=1)
    print(response.text)
except RequestException as e:
    print(f"An error occurred: {e}")

在 Python 的 requests 库中,可以通过多种方式设置代理、添加 cookies 和进行 SSL 证书验证。下面是如何执行这些操作的示例:

7. 设置代理

要设置代理,你可以使用 proxies 参数。这个参数接收一个字典,其中包含协议类型(如 'http' 或 'https')和代理服务器的 URL。

import requests

proxies = {
   
    'http': 'http://10.10.1.10:3128',
    'https': 'http://10.10.1.10:1080',
}

response = requests.get('http://example.org', proxies=proxies)

如果你需要为所有请求设置代理,可以在 requests 会话(Session)中设置:

import requests

proxies = {
   
    'http': 'http://10.10.1.10:3128',
    'https': 'http://10.10.1.10:1080',
}

s = requests.Session()
s.proxies = proxies

response = s.get('http://example.org')

8. 添加 Cookies

要向请求中添加 cookies,你可以使用 cookies 参数。这个参数接收一个字典,其中包含要设置的 cookie 名称和值。

import requests

cookies = {
   
    'cookie_name': 'cookie_value',
}

response = requests.get('http://example.org', cookies=cookies)

同样,你也可以在 requests 会话中设置 cookies:

import requests

cookies = {
   
    'cookie_name': 'cookie_value',
}

s = requests.Session()
s.cookies.update(cookies)

response = s.get('http://example.org')

9. SSL 证书验证

默认情况下,requests 会对 SSL 证书进行验证。如果你需要禁用 SSL 证书验证(例如,在测试环境中),你可以将 verify 参数设置为 False

import requests

response = requests.get('https://example.org', verify=False)

如果你有一个自定义的 CA 证书束,你可以将证书路径传递给 verify 参数。

import requests

response = requests.get('https://example.org', verify='/path/to/certfile')

请注意,禁用 SSL 证书验证会降低安全性,因为它允许你连接到不受信任的服务器。在生产环境中,你应该总是启用 SSL 证书验证。

在 Python 的 requests 库中,你可以通过不同的参数和方法来设置超时、流式传输响应内容以及进行身份验证。以下是一些示例和说明:

10. 设置超时

如果你不希望你的 HTTP 请求花费太多时间,你可以设置超时。requests 允许你通过 timeout 参数来指定一个超时时间(以秒为单位)。

import requests

try:
    response = requests.get('http://example.org', timeout=5)  # 设置超时为 5 秒
    print(response.text)
except requests.Timeout:
    print("请求超时")

在这个例子中,如果请求没有在 5 秒内完成,requests 将引发一个 requests.Timeout 异常。

11. 流式传输响应内容

默认情况下,requests 会一次性下载整个响应内容。对于大文件或流式数据,你可能希望边下载边处理数据,而不是等待整个文件下载完成。你可以通过设置 stream 参数为 True 来实现这一点。

import requests

response = requests.get('http://example.org/large-file', stream=True)

with open('large-file', 'wb') as fd:
    for chunk in response.iter_content(chunk_size=1024):  # 每次读取 1024 字节
        if chunk:  # 过滤掉空字节块
            fd.write(chunk)

在这个例子中,response.iter_content() 方法用于分块读取响应内容,chunk_size 参数定义了每个块的大小。

12. 身份验证

requests 支持基本身份验证(Basic Authentication),你可以通过 auth 参数来提供用户名和密码。

import requests
from requests.auth import HTTPBasicAuth

response = requests.get('http://example.org/protected-resource', auth=HTTPBasicAuth('username', 'password'))
print(response.text)

在这个例子中,HTTPBasicAuth 用于创建一个包含用户名和密码的身份验证对象,该对象被传递给 auth 参数。

此外,requests 还支持其他类型的身份验证,如摘要式身份验证(Digest Authentication)和 OAuth。对于更复杂的身份验证需求,你可能需要使用第三方库,如 requests-oauthlib

二、requests属性/方法

属性/方法 说明

apparent_encoding |编码方式
close() |关闭与服务器的连接
content |返回响应的内容,以字节为单位
cookies |返回一个 CookieJar 对象,包含了从服务器发回的 cookie
elapsed |返回一个 timedelta 对象,包含了从发送请求到响应到达之间经过的时间量,可以用于测试响应速度。比如 r.elapsed.microseconds 表示响应到达需要多少微秒。
encoding| 解码 r.text 的编码方式
headers |返回响应头,字典格式
history |返回包含请求历史的响应对象列表(url)
is_permanent_redirect| 如果响应是永久重定向的 url,则返回 True,否则返回 False
is_redirect |如果响应被重定向,则返回 True,否则返回 False
iter_content()| 迭代响应
iter_lines() |迭代响应的行
json() |返回结果的 JSON 对象 (结果需要以 JSON 格式编写的,否则会引发错误)
links |返回响应的解析头链接
next |返回重定向链中下一个请求的 PreparedRequest 对象
ok |检查 "status_code" 的值,如果小于400,则返回 True,如果不小于 400,则返回 False
raise_for_status() |如果发生错误,方法返回一个 HTTPError 对象
reason |响应状态的描述,比如 "Not Found" 或 "OK"
request |返回请求此响应的请求对象
status_code |返回 http 的状态码,比如 404 和 200(200 是 OK,404 是 Not Found)
text |返回响应的内容,unicode 类型数据
url |返回响应的 URL

三、requests方法

方法 描述

delete(url, args) |发送 DELETE 请求到指定 url
get(url, params, args) |发送 GET 请求到指定 url
head(url, args) |发送 HEAD 请求到指定 url
patch(url, data, args) |发送 PATCH 请求到指定 url
post(url, data, json, args)| 发送 POST 请求到指定 url
put(url, data, args) |发送 PUT 请求到指定 url
request(method, url, args) |向指定的 url 发送指定的请求方法

四、相关链接

  1. Python下载安装中心
  2. Python官网
  3. Python软件下载
  4. 「Python系列」Python简介及案例
  5. 「Python系列」Python基础语法/数据类型
  6. 「Python系列」Python解释器
  7. 「Python系列」Python运算符
  8. 「Python系列」Python数据结构
  9. 「Python系列」Python元组
  10. 「Python系列」Python集合
  11. 「Python系列」Python列表
  12. requests官方文档
相关文章
|
9月前
|
SQL 关系型数据库 数据库
Python SQLAlchemy模块:从入门到实战的数据库操作指南
免费提供Python+PyCharm编程环境,结合SQLAlchemy ORM框架详解数据库开发。涵盖连接配置、模型定义、CRUD操作、事务控制及Alembic迁移工具,以电商订单系统为例,深入讲解高并发场景下的性能优化与最佳实践,助你高效构建数据驱动应用。
1005 7
|
9月前
|
监控 安全 程序员
Python日志模块配置:从print到logging的优雅升级指南
从 `print` 到 `logging` 是 Python 开发的必经之路。`print` 调试简单却难维护,日志混乱、无法分级、缺乏上下文;而 `logging` 支持级别控制、多输出、结构化记录,助力项目可维护性升级。本文详解痛点、优势、迁移方案与最佳实践,助你构建专业日志系统,让程序“有记忆”。
750 0
|
12月前
|
存储 Web App开发 前端开发
Python + Requests库爬取动态Ajax分页数据
Python + Requests库爬取动态Ajax分页数据
|
9月前
|
JSON 算法 API
Python中的json模块:从基础到进阶的实用指南
本文深入解析Python内置json模块的使用,涵盖序列化与反序列化核心函数、参数配置、中文处理、自定义对象转换及异常处理,并介绍性能优化与第三方库扩展,助你高效实现JSON数据交互。(238字)
715 4
|
10月前
|
安全 大数据 程序员
Python operator模块的methodcaller:一行代码搞定对象方法调用的黑科技
`operator.methodcaller`是Python中处理对象方法调用的高效工具,替代冗长Lambda,提升代码可读性与性能。适用于数据过滤、排序、转换等场景,支持参数传递与链式调用,是函数式编程的隐藏利器。
277 4
|
9月前
|
Java 调度 数据库
Python threading模块:多线程编程的实战指南
本文深入讲解Python多线程编程,涵盖threading模块的核心用法:线程创建、生命周期、同步机制(锁、信号量、条件变量)、线程通信(队列)、守护线程与线程池应用。结合实战案例,如多线程下载器,帮助开发者提升程序并发性能,适用于I/O密集型任务处理。
788 0
|
9月前
|
XML JSON 数据处理
超越JSON:Python结构化数据处理模块全解析
本文深入解析Python中12个核心数据处理模块,涵盖csv、pandas、pickle、shelve、struct、configparser、xml、numpy、array、sqlite3和msgpack,覆盖表格处理、序列化、配置管理、科学计算等六大场景,结合真实案例与决策树,助你高效应对各类数据挑战。(238字)
1239 0
|
10月前
|
存储 数据库 开发者
Python SQLite模块:轻量级数据库的实战指南
本文深入讲解Python内置sqlite3模块的实战应用,涵盖数据库连接、CRUD操作、事务管理、性能优化及高级特性,结合完整案例,助你快速掌握SQLite在小型项目中的高效使用,是Python开发者必备的轻量级数据库指南。
813 0
|
11月前
|
存储 安全 数据处理
Python 内置模块 collections 详解
`collections` 是 Python 内置模块,提供多种高效数据类型,如 `namedtuple`、`deque`、`Counter` 等,帮助开发者优化数据处理流程,提升代码可读性与性能,适用于复杂数据结构管理与高效操作场景。
623 0

推荐镜像

更多