「Python系列」Python requests模块

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
可观测可视化 Grafana 版,10个用户账号 1个月
简介: `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官方文档
相关文章
|
5天前
|
Python
【Python进阶(五)】——模块搜索及工作目录
【Python进阶(五)】——模块搜索及工作目录
|
16小时前
|
运维 网络安全 Python
使用Python http.server模块共享文件
今天给大家介绍一下Python标准库中的http.server模块。这个模块提供了一种简单的方式来快速启动一个HTTP服务器,非常适合临时共享文件、测试、教学等轻量级场景。
|
16小时前
|
数据采集 数据挖掘 Python
2024年最新【Python从零到壹】Python模块介绍与使用,面试的时候答不上来
2024年最新【Python从零到壹】Python模块介绍与使用,面试的时候答不上来
2024年最新【Python从零到壹】Python模块介绍与使用,面试的时候答不上来
|
16小时前
|
Python
2024年最新【Python从零到壹】Python模块介绍与使用(1),2024年最新阿里面试场景题
2024年最新【Python从零到壹】Python模块介绍与使用(1),2024年最新阿里面试场景题
2024年最新【Python从零到壹】Python模块介绍与使用(1),2024年最新阿里面试场景题
|
17小时前
|
机器学习/深度学习 数据采集 自然语言处理
[python][whl]python模块triton的whl文件下载地址汇总(1)
[python][whl]python模块triton的whl文件下载地址汇总(1)
|
2天前
|
关系型数据库 Java 分布式数据库
实时计算 Flink版操作报错合集之在使用 Python UDF 时遇到 requests 包的导入问题,提示 OpenSSL 版本不兼容如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
19 5
|
3天前
|
Python
【Python3 查询手册学习】,完整版PDF开放下载_python速查手册·模块卷(全彩版) pdf(1)
【Python3 查询手册学习】,完整版PDF开放下载_python速查手册·模块卷(全彩版) pdf(1)
|
4天前
|
Python
Python使用typing模块(从Python 3.5开始)
【5月更文挑战第10天】Python使用typing模块(从Python 3.5开始)
13 3
|
5天前
|
Python
在Python中,利用`os模块`的`path.exists()`函数可判断文件是否存
【5月更文挑战第12天】在Python中,利用`os模块`的`path.exists()`函数可判断文件是否存在,该函数对路径进行检查,存在则返回True,不存在则返回False。示例代码展示了如何检查'example.txt'文件是否存在并相应打印消息。此外,`os.path.isfile()`用于确认路径是否为文件,仅当是文件时返回True,否则返回False,同样配以示例说明其用法。
23 2
|
5天前
|
Python Windows
python中的异常与模块
python中的异常与模块
13 1