「Python系列」Python requests模块

本文涉及的产品
云原生网关 MSE Higress,422元/月
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: `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官方文档
相关文章
|
2月前
|
开发者 Python
如何在Python中管理模块和包的依赖关系?
在实际开发中,通常会结合多种方法来管理模块和包的依赖关系,以确保项目的顺利进行和可维护性。同时,要及时更新和解决依赖冲突等问题,以保证代码的稳定性和可靠性
57 4
|
21天前
|
Python
Python Internet 模块
Python Internet 模块。
118 74
|
2月前
|
算法 数据安全/隐私保护 开发者
马特赛特旋转算法:Python的随机模块背后的力量
马特赛特旋转算法是Python `random`模块的核心,由松本真和西村拓士于1997年提出。它基于线性反馈移位寄存器,具有超长周期和高维均匀性,适用于模拟、密码学等领域。Python中通过设置种子值初始化状态数组,经状态更新和输出提取生成随机数,代码简单高效。
119 63
|
2月前
|
测试技术 Python
手动解决Python模块和包依赖冲突的具体步骤是什么?
需要注意的是,手动解决依赖冲突可能需要一定的时间和经验,并且需要谨慎操作,避免引入新的问题。在实际操作中,还可以结合使用其他方法,如虚拟环境等,来更好地管理和解决依赖冲突😉。
|
2月前
|
持续交付 Python
如何在Python中自动解决模块和包的依赖冲突?
完全自动解决所有依赖冲突可能并不总是可行,特别是在复杂的项目中。有时候仍然需要人工干预和判断。自动解决的方法主要是提供辅助和便捷,但不能完全替代人工的分析和决策😉。
|
20天前
|
JSON 数据可视化 测试技术
python+requests接口自动化框架的实现
通过以上步骤,我们构建了一个基本的Python+Requests接口自动化测试框架。这个框架具有良好的扩展性,可以根据实际需求进行功能扩展和优化。它不仅能提高测试效率,还能保证接口的稳定性和可靠性,为软件质量提供有力保障。
51 7
|
2月前
|
JSON Linux 数据格式
Python模块:从入门到精通,只需一篇文章!
Python中的模块是将相关代码组织在一起的单元,便于重用和维护。模块可以是Python文件或C/C++扩展,Python标准库中包含大量模块,如os、sys、time等,用于执行各种任务。定义模块只需创建.py文件并编写代码,导入模块使用import语句。此外,Python还支持自定义模块和包,以及虚拟环境来管理项目依赖。
Python模块:从入门到精通,只需一篇文章!
|
2月前
|
Python
Python的模块和包
总之,模块和包是 Python 编程中非常重要的概念,掌握它们可以帮助我们更好地组织和管理代码,提高开发效率和代码质量
45 5
|
2月前
|
数据可视化 Python
如何在Python中解决模块和包的依赖冲突?
解决模块和包的依赖冲突需要综合运用多种方法,并且需要团队成员的共同努力和协作。通过合理的管理和解决冲突,可以提高项目的稳定性和可扩展性
|
2月前
|
JavaScript 前端开发 Python
python中的OS模块的基本使用
欢迎来到瑞雨溪的博客,一名热爱JavaScript与Vue的大一学生。博客分享前端技术及全栈开发经验,持续更新中,期待您的关注和支持!🎉🎉🎉
40 0