当前位置: 首页 > news >正文

Python Requests库详解

        大家好,在现代网络开发中,与Web服务器进行通信是一项至关重要的任务。Python作为一种多才多艺的编程语言,提供了各种工具和库来简化这一过程。其中,Requests库作为Python中最受欢迎的HTTP库之一,为开发人员提供了简单而强大的方式来发送HTTP请求和处理响应。

        从最基本的GET请求到复杂的身份验证和代理设置,Requests库为我们提供了丰富的功能和灵活的接口。无论是爬虫、Web开发还是测试,Requests都是一个不可或缺的工具。

        本文将带领您深入探索Python Requests库的世界。我们将从基础知识开始,逐步深入,覆盖各种高级用法和技巧。无论您是初学者还是有经验的开发者,本文都将为您提供有价值的信息和实用的技巧,帮助您更好地利用Python Requests库构建强大的网络应用。

一、介绍

        在现代网络通信中,发送HTTP请求和处理响应是编程中常见的任务之一。而Python中的Requests库为开发人员提供了一种简单、优雅且功能丰富的方法来处理这些任务。

Requests是什么?

        Requests是一个优雅且简洁的HTTP库,专门设计用于发送各种类型的HTTP请求。它由Kenneth Reitz于2010年创建,并迅速成为Python社区中最受欢迎的HTTP客户端库之一。Requests库构建在Python的标准库urllib之上,提供了更简洁、更人性化的接口。

Requests库的作用

        Requests库的主要作用是简化HTTP请求的发送和响应的处理。通过Requests,开发人员可以轻松地执行GET、POST、PUT、DELETE等各种类型的HTTP请求,并处理服务器返回的响应数据。不仅如此,Requests还提供了许多方便的功能,比如自动处理重定向、会话管理、身份验证、代理设置等,使得网络通信变得更加简单和灵活。

为什么Requests库如此流行?

Requests库之所以如此流行,是因为它具有以下几个显著的优点:

  1. 简单易用:Requests提供了简洁而直观的API,使得发送HTTP请求变得非常容易。开发人员无需处理复杂的细节,只需几行代码就可以完成常见的网络通信任务。

  2. 功能丰富:尽管Requests提供了简单的接口,但它同时也提供了许多强大的功能和高级选项,满足了各种复杂场景下的需求。无论是处理会话、处理重定向、进行身份验证还是设置代理,Requests都能轻松胜任。

  3. 文档齐全:Requests拥有清晰、详细的官方文档,涵盖了库的各个方面,包括基本用法、高级功能、示例代码等。这使得开发人员可以轻松查阅文档,解决各种问题。

  4. 活跃的社区支持:Requests库拥有一个庞大且活跃的社区,开发人员可以在社区中获得及时的帮助和支持。无论是提出问题、报告Bug还是贡献代码,社区都是一个宝贵的资源。

        Requests库因其简单易用、功能丰富且受到活跃的社区支持而在Python开发中广受欢迎。它成为了许多开发人员处理HTTP请求的首选工具,为他们节省了大量的时间和精力。

二、安装

        安装Requests库是开始使用它的第一步。在这一部分,我们将详细说明如何安装Requests库,并提供一些可能遇到的安装问题及其解决方案。

1. 使用pip安装

        大多数情况下,使用Python的包管理工具pip来安装Requests库是最简单的方法。如果你使用的是Python 3,通常pip已经随着Python的安装而包含在内。以下是安装Requests库的命令:

pip install requests

2. 使用conda安装

如果你使用的是Anaconda Python发行版,你也可以使用conda来安装Requests库:

conda install requests

3. 可能的安装问题及解决方案

        尽管安装Requests库通常是一件简单的事情,但有时你可能会遇到一些问题。以下是一些可能的安装问题及其解决方案:

问题1:SSL证书验证失败

        有时在安装Requests库时可能会出现SSL证书验证失败的问题,这可能是因为缺少适当的SSL证书或网络环境的问题。

解决方案:你可以尝试在安装时禁用SSL证书验证。在pip安装时,你可以使用--trusted-host参数,如下所示:

pip install --trusted-host pypi.org --trusted-host pypi.python.org --trusted-host=files.pythonhosted.org requests

问题2:安装过程慢或失败

有时由于网络问题或服务器问题,安装过程可能会变得缓慢或失败。

解决方案:你可以尝试更换pip的镜像源来加速安装过程,或者尝试多次运行安装命令以解决服务器问题。

问题3:权限问题

在某些操作系统中,可能会由于权限问题而导致安装失败。

解决方案:你可以尝试使用管理员权限或者使用虚拟环境来避免权限问题。

问题4:依赖冲突

有时安装Requests库可能会与其他依赖冲突。

解决方案:你可以尝试升级或降级pip、Python或其他相关的依赖包,以解决依赖冲突。

三、发送基本的 GET 和 POST 请求

        在网络通信中,最常见的两种HTTP请求是GET请求和POST请求。GET请求用于从服务器获取资源,而POST请求用于向服务器提交数据。在这一部分,我们将演示如何使用Requests库发送最基本的GET和POST请求,并解释它们之间的区别。

1. 发送GET请求

        使用Requests库发送GET请求非常简单。你只需要使用requests.get()函数,并传入目标URL即可。下面是一个简单的示例:

import requests# 发送GET请求
response = requests.get('https://api.example.com/data')# 打印响应内容
print(response.text)

上面的代码发送了一个GET请求到https://api.example.com/data,并打印了服务器响应的内容。

2. 发送POST请求

与GET请求类似,发送POST请求也非常简单。你只需要使用requests.post()函数,并传入目标URL和要提交的数据即可。下面是一个简单的示例:

import requests# 要提交的数据
data = {'username': 'user', 'password': '123456'}# 发送POST请求
response = requests.post('https://api.example.com/login', data=data)# 打印响应内容
print(response.text)

        上面的代码发送了一个POST请求到https://api.example.com/login,并提交了用户名和密码数据。服务器接收到数据后,会进行处理,并返回相应的响应。

3. GET请求和POST请求的区别

GET请求和POST请求的主要区别在于数据的传输方式和安全性:

  • GET请求:通过URL参数传递数据,数据以明文形式出现在URL中,因此不适合传输敏感信息。GET请求通常用于获取资源,比如网页、图片等。

  • POST请求:通过请求体传递数据,数据以密文形式传输,因此更安全,适合传输敏感信息。POST请求通常用于向服务器提交数据,比如用户登录、提交表单等。

        总的来说,GET请求适合用于获取资源,而POST请求适合用于提交数据。在实际开发中,你需要根据具体的需求选择合适的请求方式。

四、请求头和请求体

        在发送HTTP请求时,除了URL以外,还可以设置请求头和请求体。请求头用于传递一些额外的信息给服务器,比如用户代理、授权信息等。请求体则用于向服务器提交数据,比如表单数据、JSON数据等。在这一部分,我们将详细说明如何设置请求头和请求体,并解释它们的作用。

1. 设置请求头

        使用Requests库设置请求头非常简单,你只需要传递一个字典给headers参数即可。下面是一个示例:

import requests# 设置请求头
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36','Authorization': 'Bearer your_access_token'
}# 发送带有自定义请求头的GET请求
response = requests.get('https://api.example.com/data', headers=headers)# 打印响应内容
print(response.text)

上面的代码设置了两个常见的请求头:User-Agent用于指定用户代理,Authorization用于进行身份验证。你可以根据需要设置其他请求头。

2. 设置请求体

发送POST请求时,你可以通过data参数设置请求体,传递要提交的数据。如果要发送JSON数据,可以使用json参数。下面是一个示例:

import requests# 要提交的数据
data = {'username': 'user','password': '123456'
}# 发送带有请求体的POST请求
response = requests.post('https://api.example.com/login', data=data)# 打印响应内容
print(response.text)

上面的代码设置了一个请求体,包含了用户名和密码数据。服务器收到数据后,会进行处理,并返回相应的响应。

3. 请求头和请求体的作用

  • 请求头:请求头包含了一些附加的信息,用于告诉服务器关于请求的一些额外信息,比如客户端类型、接受的数据类型等。它可以用于实现用户代理识别、身份验证、设置Cookie等功能。

  • 请求体:请求体用于向服务器提交数据,比如表单数据、JSON数据等。它通常用于向服务器发送需要处理的数据,比如用户登录信息、搜索关键字等。

总的来说,请求头和请求体都是HTTP请求的重要组成部分,可以通过设置它们来实现各种功能和需求。

五、处理响应

        处理HTTP响应是使用Requests库的关键部分之一。在发送HTTP请求后,服务器将返回一个响应,其中包含了状态码、响应头和响应体等信息。在这一部分,我们将讨论如何处理HTTP响应,包括获取状态码、响应头和响应体,并给出相应的示例。

1. 获取状态码

        状态码是服务器对请求的响应的一个数字编码,用于指示请求的成功或失败以及失败的原因。你可以通过status_code属性来获取响应的状态码。下面是一个示例:

import requests# 发送GET请求
response = requests.get('https://api.example.com/data')# 获取状态码
status_code = response.status_code# 打印状态码
print("状态码:", status_code)

        上面的代码发送了一个GET请求,并获取了响应的状态码。你可以根据状态码来判断请求是否成功以及如何进一步处理响应。

2. 获取响应头

        响应头包含了一些关于响应的元信息,比如服务器类型、内容类型、内容长度等。你可以通过headers属性来获取响应头。下面是一个示例:

import requests# 发送GET请求
response = requests.get('https://api.example.com/data')# 获取响应头
headers = response.headers# 打印响应头
print("响应头:", headers)

        上面的代码发送了一个GET请求,并获取了响应的头部信息。你可以从中获取到各种有用的信息,比如内容类型、服务器类型等。

3. 获取响应体

        响应体包含了服务器返回的实际数据内容。你可以通过text属性来获取响应体的文本内容,或者使用content属性获取二进制内容。下面是一个示例:

import requests# 发送GET请求
response = requests.get('https://api.example.com/data')# 获取响应体文本内容
body_text = response.text# 获取响应体二进制内容
body_binary = response.content# 打印响应体文本内容
print("响应体文本内容:", body_text)# 打印响应体二进制内容
print("响应体二进制内容:", body_binary)

        上面的代码发送了一个GET请求,并获取了响应的文本内容和二进制内容。你可以根据实际需求选择使用响应体的文本内容或二进制内容。

六、处理响应内容

        在使用Requests库时,我们经常需要处理不同类型的响应内容,包括JSON、文本和二进制等。在这一部分,我们将展示如何使用Requests库处理这些不同类型的响应内容,并给出相应的示例。

1. 处理JSON响应内容

        如果服务器返回的是JSON格式的数据,我们可以使用json()方法将响应内容解析为Python字典。下面是一个示例:

import requests# 发送GET请求
response = requests.get('https://api.example.com/data')# 解析JSON响应内容
json_data = response.json()# 打印解析后的数据
print("解析后的JSON数据:", json_data)

        上面的代码发送了一个GET请求,并将响应内容解析为Python字典。你可以直接使用json_data变量来访问和操作解析后的JSON数据。

2. 处理文本响应内容

        如果服务器返回的是文本格式的数据,我们可以使用text属性来获取响应内容的文本表示。下面是一个示例:

import requests# 发送GET请求
response = requests.get('https://api.example.com/text')# 获取文本响应内容
text_data = response.text# 打印文本内容
print("文本内容:", text_data)

        上面的代码发送了一个GET请求,并获取了响应内容的文本表示。你可以直接使用text_data变量来访问和操作文本内容。

3. 处理二进制响应内容

        有时服务器返回的是二进制格式的数据,比如图片、音频等。我们可以使用content属性来获取响应内容的二进制表示。下面是一个示例:

import requests# 发送GET请求
response = requests.get('https://api.example.com/image')# 获取二进制响应内容
binary_data = response.content# 将二进制内容写入文件
with open('image.jpg', 'wb') as f:f.write(binary_data)

        上面的代码发送了一个GET请求,并获取了响应内容的二进制表示。然后,我们将二进制内容写入到名为image.jpg的文件中,以保存图片文件。

七、高级功能

        Requests库不仅提供了基本的HTTP请求功能,还支持许多高级功能,包括会话管理、身份验证、代理设置、SSL验证等。在这一部分,我们将介绍这些高级功能,并给出相应的示例。

1. 会话管理

        会话管理允许你在多个请求之间保持会话状态。这对于模拟登录过程或者保持持久连接非常有用。你可以使用Session对象来创建一个持久的会话,并在此会话中发送多个请求。下面是一个示例:

import requests# 创建会话对象
session = requests.Session()# 发送第一个请求
response1 = session.get('https://api.example.com/login')# 发送第二个请求
response2 = session.get('https://api.example.com/data')# 关闭会话
session.close()# 打印响应内容
print("第一个请求响应内容:", response1.text)
print("第二个请求响应内容:", response2.text)

        上面的代码创建了一个会话对象session,然后使用这个会话对象发送了两个请求。由于这两个请求共享同一个会话,因此可以保持会话状态。

2. 身份验证

        Requests库支持多种身份验证方式,包括基本身份验证、摘要身份验证、OAuth身份验证等。你可以在发送请求时,通过auth参数来指定身份验证方式。下面是一个示例:

import requests# 基本身份验证
response = requests.get('https://api.example.com/data', auth=('username', 'password'))# 打印响应内容
print("响应内容:", response.text)

        上面的代码使用基本身份验证方式发送了一个GET请求,其中用户名为username,密码为password

3. 代理设置

        有时候我们需要通过代理服务器来发送HTTP请求。Requests库允许你通过proxies参数来设置代理服务器。下面是一个示例:

import requests# 设置代理服务器
proxies = {'http': 'http://10.10.1.10:3128','https': 'https://10.10.1.10:1080',
}# 发送请求通过代理服务器
response = requests.get('https://api.example.com/data', proxies=proxies)# 打印响应内容
print("响应内容:", response.text)

        上面的代码设置了一个HTTP代理服务器和一个HTTPS代理服务器,并使用这些代理服务器发送了一个GET请求。

4. SSL验证

        Requests库默认会对HTTPS请求进行SSL证书验证。你可以通过verify参数来控制是否进行SSL验证。通常,你可以将其设置为True来进行验证,或者设置为一个包含CA证书文件路径的字符串来指定验证证书。下面是一个示例:

import requests# 发送HTTPS请求并进行SSL验证
response = requests.get('https://api.example.com/data', verify=True)# 打印响应内容
print("响应内容:", response.text)

上面的代码发送了一个HTTPS请求,并进行了SSL验证。

八、异常处理

        在进行网络请求时,可能会遇到各种异常情况,比如网络连接问题、服务器错误、超时等。为了确保代码的健壮性和可靠性,我们需要对这些异常情况进行适当的处理。在这一部分,我们将讨论可能出现的异常情况,并展示如何使用异常处理机制来处理这些异常。

1. 网络连接问题

        网络连接问题是最常见的异常之一。如果无法连接到目标服务器,Requests库将抛出ConnectionError异常。你可以使用try-except语句来捕获并处理这个异常。下面是一个示例:

import requeststry:# 发送请求response = requests.get('https://api.example.com/data')# 检查响应状态码if response.status_code == 200:print("请求成功")else:print("请求失败:", response.status_code)
except requests.exceptions.ConnectionError:print("网络连接异常,无法连接到服务器")

        上面的代码尝试发送一个GET请求,如果无法连接到服务器,则会捕获ConnectionError异常,并打印出相应的错误信息。

2. 服务器错误

        有时服务器可能会出现错误,比如500 Internal Server Error。如果服务器返回了一个错误状态码,Requests库将抛出HTTPError异常。你可以使用try-except语句来捕获并处理这个异常。下面是一个示例:

import requeststry:# 发送请求response = requests.get('https://api.example.com/data')# 检查响应状态码response.raise_for_status()print("请求成功")
except requests.exceptions.HTTPError as err:print("服务器错误:", err)

        上面的代码尝试发送一个GET请求,如果服务器返回了一个错误状态码,则会捕获HTTPError异常,并打印出相应的错误信息。

3. 超时

        在发送请求时,可能会出现超时的情况,即服务器在规定的时间内没有响应。如果超时发生,Requests库将抛出Timeout异常。你可以使用try-except语句来捕获并处理这个异常。下面是一个示例:

import requeststry:# 发送请求并设置超时时间为1秒response = requests.get('https://api.example.com/data', timeout=1)print("请求成功")
except requests.exceptions.Timeout:print("请求超时")

        上面的代码尝试发送一个GET请求,并设置超时时间为1秒。如果在规定时间内没有收到响应,则会捕获Timeout异常,并打印出相应的错误信息。

九、性能优化

        虽然Requests库已经为我们提供了简单而强大的方式来发送HTTP请求,但在处理大量请求时,仍然有一些性能优化的技巧可以使用。下面是一些关于如何优化使用Requests库性能的建议:

1. 使用连接池

        默认情况下,每次发送请求时都会创建一个新的TCP连接。如果你需要发送大量的请求,可以使用连接池来重用已经建立的连接,以减少连接的建立和关闭开销。你可以使用requests.Session对象来创建一个会话,并设置连接池参数。下面是一个示例:

import requests# 创建会话对象并设置连接池大小
session = requests.Session()
adapter = requests.adapters.HTTPAdapter(pool_connections=100, pool_maxsize=100)
session.mount('http://', adapter)
session.mount('https://', adapter)# 使用会话对象发送请求
response = session.get('https://api.example.com/data')# 关闭会话
session.close()

        上面的代码创建了一个会话对象session,并设置了连接池大小为100。通过使用会话对象发送请求,可以重用已经建立的连接,提高性能。

2. 使用持久连接

        持久连接允许客户端和服务器在多次请求之间保持TCP连接的状态,从而减少了连接的建立和关闭开销。在HTTP/1.1中,持久连接是默认启用的。你可以使用Connection: keep-alive头部来确保持久连接。下面是一个示例:

import requests# 发送请求并设置持久连接头部
response = requests.get('https://api.example.com/data', headers={'Connection': 'keep-alive'})# 打印响应内容
print("响应内容:", response.text)

        上面的代码发送了一个GET请求,并设置了持久连接头部。服务器收到请求后,将保持连接的状态,并在后续请求中重用相同的连接,提高性能。

3. 合理使用并发

        在某些场景下,可以通过并发发送多个请求来提高性能。你可以使用多线程、异步请求等方式来实现并发。然而,在使用并发时需要注意合理控制并发量,以避免对服务器造成过大的负载。下面是一个使用concurrent.futures模块实现多线程并发的示例:

import requests
import concurrent.futures# 定义请求函数
def fetch_data(url):response = requests.get(url)return response.text# 定义多个请求URL
urls = ['https://api.example.com/data1', 'https://api.example.com/data2', 'https://api.example.com/data3']# 使用多线程并发发送请求
with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:results = executor.map(fetch_data, urls)# 打印响应内容
for result in results:print("响应内容:", result)

        上面的代码定义了一个fetch_data函数用于发送请求,并使用ThreadPoolExecutor来实现多线程并发发送请求。

十、案例

        Requests库在真实项目中被广泛应用,下面我们通过一些实际的案例分析来展示Requests库在不同场景下的应用。

1. 网络爬虫

        网络爬虫是Requests库应用的一个典型场景。通过发送HTTP请求,爬虫程序可以获取网页内容,并对其进行解析和提取信息。Requests库提供了简洁而强大的API,使得编写爬虫程序变得简单而高效。下面是一个简单的网络爬虫示例,用于获取网页内容:

import requests# 发送GET请求获取网页内容
response = requests.get('https://www.example.com')# 打印网页内容
print("网页内容:", response.text)

在实际项目中,网络爬虫可以用于数据采集、搜索引擎索引等场景。

2. API调用

        Requests库也广泛应用于调用各种Web API接口。许多Web服务提供了API接口,通过发送HTTP请求,我们可以与这些服务进行交互,并获取数据或执行操作。下面是一个调用GitHub API获取用户信息的示例:

import requests# 发送GET请求调用GitHub API
response = requests.get('https://api.github.com/users/octocat')# 解析JSON响应内容
user_info = response.json()# 打印用户信息
print("用户名:", user_info['login'])
print("用户ID:", user_info['id'])
print("用户URL:", user_info['html_url'])

在实际项目中,API调用可以用于数据获取、服务集成等场景。

3. Web自动化测试

        Requests库也可以用于编写Web自动化测试脚本。通过发送HTTP请求,我们可以模拟用户与Web应用的交互,并进行自动化测试。下面是一个使用Requests库进行Web自动化测试的示例:

import requests# 发送POST请求提交表单数据
response = requests.post('https://www.example.com/login', data={'username': 'user', 'password': '123456'})# 检查登录是否成功
if 'Welcome, user!' in response.text:print("登录成功")
else:print("登录失败")

在实际项目中,Web自动化测试可以用于测试Web应用的功能和性能。

相关文章:

Python Requests库详解

大家好,在现代网络开发中,与Web服务器进行通信是一项至关重要的任务。Python作为一种多才多艺的编程语言,提供了各种工具和库来简化这一过程。其中,Requests库作为Python中最受欢迎的HTTP库之一,为开发人员提供了简单而…...

Kafka 详解:全面解析分布式流处理平台

Kafka 详解:全面解析分布式流处理平台 Apache Kafka 是一个分布式流处理平台,主要用于构建实时数据管道和流式应用。它具有高吞吐量、低延迟、高可用性和高可靠性的特点,广泛应用于日志收集、数据流处理、消息系统、实时分析等场景。 &…...

RabbitMQ系列-rabbitmq无法重新加入集群,启动失败的问题

当前存在3个节点:rabbitmq5672、rabbitmq5673、rabbitmq5674 当rabbitmq5673节点掉线之后,重启失败 重启的时候5672节点报错如下: 解决方案 在集群中取消失败节点 rabbitmqctl forget_cluster_node rabbitrabbitmq5673删除失败节点5673的…...

postgresql之翻页优化

列表和翻页是所有应用系统里面必不可少的需求,但是当深度翻页的时候,越深越慢。下面是几种常用方式 准备工作 CREATE UNLOGGED TABLE data (id bigint GENERATED ALWAYS AS IDENTITY,value double precision NOT NULL,created timestamp with time zon…...

小白学Linux | 日志排查

一、windows日志分析 在【运行】对话框中输入【eventvwr】命令,打开【事件查看器】窗 口,查看相关的日志 管理员权限进入PowerShell 使用Get-EventLog Security -InstanceId 4625命令,可获取安全性日志下事 件 ID 为 4625(失败登…...

Spring6

一 概述 1.1、Spring是什么? Spring 是一款主流的 Java EE 轻量级开源框架 ,Spring 由“Spring 之父”Rod Johnson 提出并创立,其目的是用于简化 Java 企业级应用的开发难度和开发周期。Spring的用途不仅限于服务器端的开发。从简单性、可测…...

数字孪生概念、数字孪生技术架构、数字孪生应用场景,深度长文学习

一、数字孪生起源与发展 1.1 数字孪生产生背景 数字孪生的概念最初由Grieves教授于2003年在美国密歇根大学的产品全生命周期管理课程上提出,并被定义为三维模型,包括实体产品、虚拟产品以及二者间的连接,如下图所示: 2011年&…...

云服务对比:阿里云国际站和阿里云国内站有什么区别

阿里云国际站(Alibaba Cloud International)和阿里云国内站(Alibaba Cloud China)在许多方面存在明显区别,这些区别主要体现在服务范围、合规性、定价和支付方式、语言和客服支持、以及备案要求等方面。 首先&#xf…...

如何在npm上发布自己的包

如何在npm上发布自己的包 npm创建自己的包 一、一个简单的创建 1、创建npm账号 官网:https://www.npmjs.com/创建账号入口:https://www.npmjs.com/signup 注意:需要进入邮箱验证 2、创建目录及初始化 $ mkdir ufrontend-test $ cd ufron…...

SQL Chat:从SQL到SPEAKL的数据库操作新纪元

引言 SQL Chat是一款创新的、对话式的SQL客户端工具。 它采用自然语言处理技术,让你能够像与人交流一样,通过日常对话的形式对数据库执行查询、修改、创建及删除操作 极大地简化了数据库管理流程,提升了数据交互的直观性和效率。 在这个框…...

jmeter性能优化之mysql配置

一、连接数据库和grafana 准备:连接好数据库和启动grafana并导入mysql模板 大批量注册、登录、下单等,还有过节像618,双11和数据库交互非常庞大,都会存在数据库的某一张表里面,当用户在登录或者查询某一个界面时&…...

VueRouter3学习笔记

文章目录 1,入门案例2,一些细节高亮效果非当前路由会被销毁 3,嵌套路由4, 传递查询参数5,命名路由6,传递路径参数7,路径参数转props8,查询参数转props9,replace模式10&am…...

「前端+鸿蒙」鸿蒙应用开发-TS函数

在 TypeScript 中,函数是一等公民,这意味着函数可以作为参数传递、作为其他函数的返回值,甚至可以赋值给变量。TypeScript 为 JavaScript 的函数增加了类型系统,使得函数的参数和返回值都具有明确的类型。 TS快速入门-函数 基本函…...

python后端结合uniapp与uview组件tabs,实现自定义导航按钮与小标签颜色控制

实现效果(红框内): 后端api如下: task_api.route(/user/task/states_list, methods[POST, GET]) visitor_token_required def task_states(user):name_list [待接单, 设计中, 交付中, 已完成, 全部]data []color [#F04864, …...

mingw如何制作动态库附python调用

1.mingw和msvc g -fpic HelloWorld.cpp -shared -o test.dllg -L . -ltest .\test.cpp 注意-L后面的.挨不挨着都行,-l不需要-ltest.dll,只需要-ltest 2.dll.cpp extern "C" {__declspec(dllexport) int __stdcall add(int a, int b) {return…...

Vue学习|Vue快速入门、常用指令、生命周期、Ajax、Axios

什么是Vue? Vue 是一套前端框架,免除原生JavaScript中的DOM操作,简化书写 基于MVVM(Model-View-ViewModel)思想,实现数据的双向绑定,将编程的关注点放在数据上。官网:https://v2.cn.vuejs.org/ Vue快速入门 打开页面&#xff0…...

Python基础教程(八):迭代器与生成器编程

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 💝&#x1f49…...

Oracle10.2.0.1冷备迁移之_数据文件拷贝方式

由于阿里云机房要下架旧服务器,单位未购买整机迁移服务,且业务较老不兼容Oracle11g,所以新购买一台新服务器进行安装Oracle10.2.0.1 ,后续再将数据迁移到新服务器上。 id 数据库版本 操作系统版本 实例名 源库 115.28.242.25…...

智能合约中外部调用漏洞

外部调用 : 在智能合约开发中,调用不受信任的外部合约是一个常见的安全风险点。这是因为,当你调用另一个合约的函数时,你实际上是在执行那个合约的代码,而这可能会引入你未曾预料的行为,包括恶意行为。下面…...

转型AI产品经理(4):“认知负荷”如何应用在Chatbot产品

认知负荷理论主要探讨在学习过程中,人脑处理信息的有限容量以及如何优化信息的呈现方式以促进学习。认知负荷定律认为,学习者的工作记忆容量是有限的,而不同类型的认知任务会对工作记忆产生不同程度的负荷,从而影响学习效果。以下…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别

【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势&#xf…...

springboot 日志类切面,接口成功记录日志,失败不记录

springboot 日志类切面,接口成功记录日志,失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...

快速排序算法改进:随机快排-荷兰国旗划分详解

随机快速排序-荷兰国旗划分算法详解 一、基础知识回顾1.1 快速排序简介1.2 荷兰国旗问题 二、随机快排 - 荷兰国旗划分原理2.1 随机化枢轴选择2.2 荷兰国旗划分过程2.3 结合随机快排与荷兰国旗划分 三、代码实现3.1 Python实现3.2 Java实现3.3 C实现 四、性能分析4.1 时间复杂度…...

React从基础入门到高级实战:React 实战项目 - 项目五:微前端与模块化架构

React 实战项目:微前端与模块化架构 欢迎来到 React 开发教程专栏 的第 30 篇!在前 29 篇文章中,我们从 React 的基础概念逐步深入到高级技巧,涵盖了组件设计、状态管理、路由配置、性能优化和企业级应用等核心内容。这一次&…...

高抗扰度汽车光耦合器的特性

晶台光电推出的125℃光耦合器系列产品(包括KL357NU、KL3H7U和KL817U),专为高温环境下的汽车应用设计,具备以下核心优势和技术特点: 一、技术特性分析 高温稳定性 采用先进的LED技术和优化的IC设计,确保在…...