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

Python实现Web请求与响应

目录

一、Web 请求与响应基础

(一)Web 请求与响应的定义与组成

(二)HTTP 协议概述

(三)常见的 HTTP 状态码

二、Python 的 requests 库

(一)安装 requests 库

(二)发送 GET 请求

(三)发送 POST 请求

(四)处理响应头和状态码

(五)发送带查询参数的 GET 请求

(六)发送带表单数据的 POST 请求

三、处理 JSON 响应

四、文件操作

(一)打开文件的模式

(二)读取文件

(三)写入文件

(四)下载文件示例

(五)文件操作中的注意事项

(六)其他常用文件操作

五、错误处理与异常捕获

(一)try 语句的使用

(二)示例:捕获常见异常

(三)异常处理总结

六、try语句

(一) 基本语法与结构

(二)捕获多种异常

( 三)捕获所有异常

(四)主动抛出异常(raise)

(五)自定义异常

(六)异常链(raise ... from)

( 七)上下文管理器(with 语句)

(八) 常见异常类型

(九)最佳实践

(十)异常处理流程

(十一) 高级用法:try-except-else-finally 组合

(十二)异常与性能


一、Web 请求与响应基础

(一)Web 请求与响应的定义与组成

Web 请求与响应是 Web 通信的基础,其中 Web 请求由客户端发起,服务器处理后返回响应。

  1. Web 请求的组成

    • 请求行:包含请求方法(如 GET、POST、PUT、DELETE 等)、URL 以及 HTTP 协议版本(如 HTTP/1.1)。例如,一个 GET 请求的请求行可能是 “GET /index.html HTTP/1.1”。
    • 请求头:包含关于客户端信息、请求体类型、浏览器类型等元数据。常见的请求头有 User - Agent(用于标识客户端类型)、Content - Type(表示请求体的数据类型)等。
    • 请求体:在 POST 请求中通常包含用户提交的数据,如表单数据或文件等,而 GET 请求一般没有请求体。
  2. Web 响应的组成

    • 响应行:包括 HTTP 协议版本、状态码和状态消息。例如 “HTTP/1.1 200 OK”,其中 200 是状态码,OK 是状态消息。
    • 响应头:包含关于响应的信息,如内容类型(Content - Type)、服务器信息(Server)等。
    • 响应体:包含实际返回的数据,可能是 HTML 页面、JSON 数据等。

(二)HTTP 协议概述

HTTP(Hypertext Transfer Protocol)是 Web 上传输数据的协议,负责浏览器与服务器之间的通信。以下是常见的 HTTP 方法:

  • GET:请求服务器获取资源,通常用于读取数据,其特点是请求参数会附加在 URL 后面,以 “?” 分隔,多个参数用 “&” 连接。例如 “https://example.com/search?keyword=python”。
  • POST:提交数据到服务器,通常用于表单提交、文件上传等,数据通过请求体传输,不会显示在 URL 中,相对更安全。
  • PUT:用于更新服务器上的资源。
  • DELETE:用于删除服务器上的资源。

(三)常见的 HTTP 状态码

  • 200 OK:表示请求成功,服务器返回所请求的数据。
  • 301 Moved Permanently:表示资源已永久移动,客户端会自动重定向到新的 URL。
  • 404 Not Found:表示请求的资源不存在。
  • 500 Internal Server Error:表示服务器内部错误。

二、Python 的 requests 库

(一)安装 requests 库

在使用 requests 库之前,需要先进行安装。如果你的系统中已经安装了 Python 的包管理工具 pip,可以通过以下命令在命令行中安装:

pip install requests

(二)发送 GET 请求

GET 请求通常用于获取数据,我们可以通过 requests.get () 方法来发送 GET 请求,并处理返回的响应。以下是一个简单的示例代码:

import requests# 发送GET请求
response = requests.get("https://www.example.com")# 输出响应的状态码
print("Status Code:", response.status_code)# 输出响应的内容
print("Response Body:", response.text)# 输出响应头
print("Response Headers:", response.headers)# 获取响应内容的长度
print("Content Length:", len(response.text))

代码解释

  • requests.get()用于发送 GET 请求,括号内传入要请求的 URL,该方法会返回一个 Response 对象,包含了服务器返回的所有信息。
  • response.status_code用于获取 HTTP 响应状态码,通过该状态码可以判断请求是否成功。
  • response.text用于获取响应的正文内容,通常是 HTML 或 JSON 数据,返回的是字符串类型。
  • response.headers用于获取响应头,它是一个类似字典的对象,可以通过键来访问相应的值。
  • len(response.text)用于返回响应正文的长度,通过该值可以帮助我们了解返回内容的大小。

(三)发送 POST 请求

POST 请求用于将数据提交到服务器,通常用于表单提交或上传文件等场景,我们使用 requests.post () 方法来发送 POST 请求。以下是示例代码:

import requests# 发送POST请求
url = "https://httpbin.org/post"
data = {"name": "Alice", "age": 25}
response = requests.post(url, data=data)# 输出响应状态码
print("Status Code:", response.status_code)# 输出响应内容(JSON格式)
print("Response Body:", response.json())

代码解释

  • requests.post()用于发送 POST 请求,第一个参数是 URL,第二个参数 data 是一个字典,包含了要提交的数据。requests 库会自动将其编码为application/x-www-form-urlencoded格式。
  • response.json()用于解析返回的 JSON 数据,它会将 JSON 格式的响应内容转换为 Python 的字典或列表等数据结构,方便我们进行处理。

(四)处理响应头和状态码

响应头提供了关于服务器的信息,状态码则告诉我们请求是否成功。我们可以通过以下代码来获取响应头和状态码:

import requests# 发送GET请求
response = requests.get("https://www.example.com")# 获取响应头
print("Response Headers:", response.headers)# 获取响应状态码
print("Status Code:", response.status_code)# 获取内容类型
print("Content - Type:", response.headers.get("Content - Type"))

代码解释

  • response.headers返回响应头,其中包含了如 Content - Type、Date、Server 等信息,我们可以通过字典的 get () 方法来获取指定键的值,如获取内容类型。
  • response.status_code返回 HTTP 状态码,通过判断该状态码是否为 200 等成功状态码,可以确定请求是否成功执行。

(五)发送带查询参数的 GET 请求

在 GET 请求中,我们可以通过 URL 传递查询参数。例如,访问一个包含参数的 URL,我们可以通过 requests.get () 方法的 params 参数来传递查询参数。以下是示例代码:

import requests# 发送带查询参数的GET请求
url = "https://httpbin.org/get"
params = {"name": "Alice", "age": 25}
response = requests.get(url, params=params)# 输出响应内容
print("Response Body:", response.json())

代码解释

  • params是一个字典,包含了要传递的查询参数。requests.get () 方法会自动将这些参数编码到 URL 中,生成的 URL 类似于 “https://httpbin.org/get?name=Alice&age=25”。

(六)发送带表单数据的 POST 请求

POST 请求可以用来提交表单数据,以下是使用 requests 发送带表单数据的 POST 请求的示例代码:

import requests# 发送带表单数据的POST请求
url = "https://httpbin.org/post"
data = {"username": "testuser", "password": "mypassword"}
response = requests.post(url, data=data)# 输出响应的内容
print("Response Body:", response.json())

代码解释

  • data参数是一个字典,包含了表单提交的数据,requests 库会自动将数据编码为application/x-www-form-urlencoded格式,该格式是表单数据提交的常见格式。

三、处理 JSON 响应

许多 Web API 返回的数据格式是 JSON,Python 的 requests 库提供了方便的 JSON 处理方法。以下是示例代码:

import requests# 发送GET请求并获取JSON响应
url = "https://api.github.com/users/octocat"
response = requests.get(url)# 解析JSON数据
data = response.json()# 输出用户的GitHub信息
print("User Login:", data["login"])
print("User Name:", data["name"])

代码解释

  • response.json()方法会将响应的内容解析为 Python 字典,这样我们就可以像操作普通字典一样方便地处理 JSON 数据,通过键来获取相应的值。

四、文件操作

(一)打开文件的模式

Python 使用内置的 open () 函数来打开文件,打开文件时需要指定文件模式(即操作文件的方式)。以下是常见的文件打开模式:

  1. 只读模式(r):默认模式,文件必须存在。如果文件不存在,会抛出 FileNotFoundError 异常。
  2. 写入模式(w):如果文件存在,会覆盖文件内容;如果文件不存在,会创建新文件。
  3. 追加模式(a):如果文件存在,写入的数据会追加到文件末尾;如果文件不存在,会创建新文件。
  4. 独占创建模式(x):若文件已存在,操作会失败并抛出 FileExistsError 异常,此模式通常用于创建文件时防止覆盖现有文件。
  5. 二进制读取模式(rb):用于读取非文本文件(如图片、音频文件)。
  6. 二进制写入模式(wb):用于写入非文本文件。
  7. 读写模式(+):文件必须存在,既可以读取文件内容,也可以写入数据。
  8. w + 模式:读写模式,如果文件存在,会覆盖文件内容;如果文件不存在,会创建新文件。
  9. a + 模式:读写模式,文件存在时,数据会追加到文件末尾;如果文件不存在,会创建新文件。
  10. rb + 模式:二进制读写模式。

以下是使用不同模式打开文件的示例代码:

# 以只读模式打开文件
with open('example.txt', 'r') as file:content = file.read()print(content)# 以写入模式打开文件,文件内容会被覆盖
with open('example.txt', 'w') as file:file.write("这是新的文件内容。\n")# 以追加模式打开文件,新的内容会追加到文件末尾
with open('example.txt', 'a') as file:file.write("追加的内容。\n")# 以二进制模式打开文件(例如读取图片)
with open('image.jpg', 'rb') as file:binary_data = file.read()print("读取到的二进制数据:", binary_data[:20])

(二)读取文件

Python 中的文件读取功能非常强大,以下是几种常见的读取方式:

  1. read () 方法:用于读取文件中的所有内容,读取后的内容会作为字符串返回。示例代码如下:
with open('example.txt', 'r') as file:content = file.read()print(content)
  1. readline () 方法:每次读取一行文件内容,适用于需要逐行处理文件的情况。示例代码如下:
with open('example.txt', 'r') as file:line = file.readline()while line:print(line.strip())  # strip()用来去除行末的换行符line = file.readline()

  1. readlines () 方法:会一次性读取文件中的所有行,并将每行数据存储为一个列表的元素,适用于需要读取整个文件并进行行处理的情况。示例代码如下:
with open('example.txt', 'r') as file:lines = file.readlines()for line in lines:print(line.strip())

(三)写入文件

Python 提供了几种方法将数据写入文件,写入操作常用于日志记录、数据导出等场景。

  1. 使用 write () 方法写入文件:该方法将指定的字符串写入文件。若文件以 “w” 模式打开,原文件内容会被覆盖;若以 “a” 模式打开,内容会被追加到文件末尾。示例代码如下:
with open('output.txt', 'w') as file:file.write("这是第一行数据。\n")file.write("这是第二行数据。\n")

  1. 使用 writelines () 方法写入多行数据:该方法接受一个可迭代对象(如列表、元组等),将其元素写入文件中,每个元素将作为一行写入文件。示例代码如下:
lines = ["第一行数据。\n", "第二行数据。\n", "第三行数据。\n"]
with open('output.txt', 'w') as file:file.writelines(lines)

(四)下载文件示例

我们可以通过 requests 库来下载文件,并将其保存到本地。以下是下载一个图片文件的示例代码:

import requestsurl = "https://www.example.com/image.jpg"  # 图片URL
response = requests.get(url)# 检查请求是否成功
if response.status_code == 200:# 使用二进制模式写入文件with open('downloaded_image.jpg', 'wb') as file:file.write(response.content)print("图片下载成功!")
else:print(f"下载失败,状态码:{response.status_code}")

代码解释

  • 首先使用 requests.get () 方法发送 GET 请求获取图片文件的内容,设置 URL 为图片的地址。
  • 通过判断响应的状态码是否为 200,来确定请求是否成功。
  • 如果请求成功,使用 with open () 语句以二进制写入模式('wb')打开文件,然后通过 file.write (response.content) 将响应的内容(二进制数据)写入文件中。response.content 返回的是字节流数据,适合用于处理二进制文件。

(五)文件操作中的注意事项

  1. 文件是否存在:在打开文件时,必须确保文件路径正确。如果文件不存在,可以使用 os.path.exists () 函数检查文件是否存在,或者使用 try - except 语句捕获 FileNotFoundError 异常。示例代码如下:
import osif os.path.exists('example.txt'):with open('example.txt', 'r') as file:content = file.read()
else:print("文件不存在!")

  1. 文件权限:在操作文件时,可能会遇到权限不足的问题。例如,尝试写入只读文件,或访问没有读取权限的文件。在这种情况下,可以使用 try - except 语句来捕获 PermissionError 异常。示例代码如下:
try:with open('readonly_file.txt', 'w') as file:file.write("尝试写入只读文件")
except PermissionError:print("权限不足,无法写入文件。")

  1. 文件自动关闭:使用 with open () 语句时,Python 会自动管理文件的打开和关闭,无需显式调用 file.close () 方法,这有助于避免文件未关闭的问题,减少资源泄漏的风险。

(六)其他常用文件操作

  1. 获取文件信息:Python 提供了 os 和 os.path 模块,可以获取文件的大小、修改时间等信息。示例代码如下:
import osfile_path = 'example.txt'
print("文件大小:", os.path.getsize(file_path), "字节")
print("文件修改时间:", os.path.getmtime(file_path))

  1. 删除文件:使用 os.remove () 函数可以删除文件。示例代码如下:
import osfile_path = 'example.txt'
if os.path.exists(file_path):os.remove(file_path)print(f"{file_path}已删除!")
else:print("文件不存在!")

五、错误处理与异常捕获

在进行 Web 请求时,可能会发生各种错误,例如网络超时、服务器错误等。requests 库通过异常处理机制帮助我们捕获这些错误,Python 的 try 语句能够捕获和处理代码块中的异常,从而避免程序崩溃,并且提供了处理错误的机会。

(一)try 语句的使用

try 语句用于捕获和处理异常,它由以下三部分组成(其中 else 块和 finally 块可选):

  • try 块:包含可能会引发异常的代码。当代码运行过程中发生错误时,程序会跳到相应的 except 块进行处理。
  • except 块:当 try 块中的代码出现异常时,程序会跳转到 except 块执行。在 except 中可以指定要捕获的异常类型,如 Timeout、HTTPError 等。
  • else 块(可选):如果 try 块中的代码没有抛出异常,则会执行 else 块中的代码。
  • finally 块(可选):无论是否发生异常,finally 块中的代码都会执行,通常用于清理资源(如关闭文件、数据库连接等)。

(二)示例:捕获常见异常

以下是捕获常见异常的示例代码:

import requests
from requests.exceptions import RequestException, Timeout, HTTPErrortry:# 发送GET请求,并设置超时时间为5秒response = requests.get("https://www.example.com", timeout=5)# 如果状态码不是200,抛出HTTPError异常response.raise_for_status()  # 如果状态码是4xx或5xx,抛出异常# 如果请求成功,则输出响应内容print("Response Body:", response.text)# 捕获请求超时异常
except Timeout:print('Request timed out')# 捕获HTTP错误(如状态码404、500等)
except HTTPError as http_err:print(f'HTTP error occurred: {http_err}')# 捕获其他网络相关的错误
except RequestException as req_err:print(f'Request error occurred: {req_err}')# 可以在finally块中清理资源(如关闭文件或连接)
finally:print("Request attempt completed.")

代码解释

  • try 块:首先发起 HTTP 请求,通过 timeout=5 参数设置超时时间为 5 秒。然后使用 response.raise_for_status () 方法来检查响应的状态码,如果服务器返回了错误的状态码(如 404、500 等,即 4xx 或 5xx 的状态码),该方法会抛出 HTTPError 异常。如果如果状态码为 200 等成功状态码,则执行后续的打印响应内容的操作。
  • except 块

    • Timeout:当请求超时(超过设置的 5 秒)时,程序会捕获到 Timeout 异常,并打印 “Request timed out”,提示用户请求超时。
    • HTTPError:若响应的状态码表明出现 HTTP 错误(例如 404 表示未找到页面,500 表示服务器内部错误等),程序会捕获到 HTTPError 异常,并打印相关错误信息,如 “HTTP error occurred: 404 Client Error: Not Found for url: https://www.example.com”,其中包含具体的错误状态码和错误描述,方便用户了解出错原因。
    • RequestException:该异常是所有 requests 库异常的基类,可以捕获任何 requests 库抛出的异常,例如连接问题、DNS 解析失败等。当发生其他网络相关错误时,程序会捕获到 RequestException 异常,并打印 “Request error occurred: [具体错误信息]”,让用户知晓发生了网络请求相关的错误。
  • finally 块:其中的代码无论是否发生异常都会被执行,这里仅打印 “Request attempt completed.”,用于表示请求的结束,通常在此处可以进行一些资源清理工作,如关闭文件、数据库连接等,确保程序的资源得到合理释放。

(三)异常处理总结

  • 避免程序崩溃:异常处理机制让我们在程序运行中能够捕获到错误并做出相应处理,避免程序因为遇到异常而突然崩溃,提高了程序的稳定性和可靠性。
  • 精确处理异常:通过 try...except 结构,可以根据不同的异常类型进行精确的捕获和处理,针对不同的错误情况执行不同的处理逻辑,使程序能够更灵活地应对各种异常情况。例如,对于超时异常可以重新发起请求,对于 HTTP 错误可以提示用户检查请求的 URL 是否正确等。
  • 资源清理:finally 块用于执行清理工作,无论是否发生异常,都会在请求处理完成后执行其中的代码,确保资源(如文件句柄、网络连接等)能够被正确释放,避免资源泄漏问题的发生,这对于长时间运行的程序尤为重要。

六、try语句

(一) 基本语法与结构

try:# 可能引发异常的代码块result = 10 / 0  # 除零错误
except ZeroDivisionError as e:# 捕获特定异常并获取错误对象print(f"错误: {e}")  # 输出: division by zero
else:# 仅在 try 块无异常时执行print("计算成功:", result)
finally:# 无论是否异常都执行(常用于资源清理)print("执行完毕")

(二)捕获多种异常

1 .分别处理不同异常

try:num = int("abc")  # ValueErrorresult = 10 / num  # ZeroDivisionError
except ValueError:print("输入不是有效整数")
except ZeroDivisionError:print("除数不能为零")

2 .合并处理同类异常

try:file = open("nonexistent.txt")  # FileNotFoundErrordata = json.load(file)  # JSONDecodeError
except (FileNotFoundError, json.JSONDecodeError) as e:print(f"文件错误: {e}")

( 三)捕获所有异常

⚠️ 不推荐滥用,可能掩盖严重问题:

try:# 任意代码
except Exception as e:print(f"未知错误: {e}")# 推荐记录堆栈信息用于调试import tracebackprint(traceback.format_exc())

(四)主动抛出异常(raise

def validate_age(age):if age < 0:raise ValueError("年龄不能为负数")return agetry:validate_age(-5)
except ValueError as e:print(e)  # 输出: 年龄不能为负数

(五)自定义异常

class AuthError(Exception):"""自定义认证错误"""def __init__(self, message="认证失败"):self.message = messagesuper().__init__(self.message)# 使用示例
try:if not user_authenticated():raise AuthError("无效令牌")
except AuthError as e:print(f"认证异常: {e}")

(六)异常链(raise ... from

保留原始异常信息,便于定位问题:

try:data = json.loads("invalid json")
except json.JSONDecodeError as e:raise RuntimeError("配置解析失败") from e

输出:

Traceback (most recent call last):File "<stdin>", line 2, in <module>
json.JSONDecodeError: Expecting value...The above exception was the direct cause of the following exception:Traceback (most recent call last):File "<stdin>", line 4, in <module>
RuntimeError: 配置解析失败

( 七)上下文管理器(with 语句)

替代 try-finally 进行自动资源管理:

try:with open("data.txt", "r") as file:content = file.read()
except FileNotFoundError:print("文件不存在")
# 文件会自动关闭,无需手动调用 file.close()

(八) 常见异常类型

异常类型触发场景
ZeroDivisionError除零错误
TypeError类型不匹配(如字符串 + 整数)
ValueError值不符合预期(如 int("abc")
FileNotFoundError文件不存在
KeyError字典键不存在
IndexError索引越界
PermissionError权限不足
TimeoutError操作超时

(九)最佳实践

1 .精确捕获异常

try:result = 10 / num
except (ZeroDivisionError, TypeError) as e:print(f"计算错误: {e}")

2 .使用 logging 记录异常

import loggingtry:# 危险操作
except Exception as e:logging.error(f"系统异常: {e}", exc_info=True)

3 .自定义异常分层

class AppError(Exception):"""应用基础异常"""class DatabaseError(AppError):"""数据库操作异常"""class ConnectionError(DatabaseError):"""连接异常"""

4 .资源清理优先用 with

# 不推荐
file = open("data.txt")
try:data = file.read()
finally:file.close()# 推荐
with open("data.txt") as file:data = file.read()

(十)异常处理流程

  1. 执行 try 块:若有异常,跳转到第一个匹配的 except
  2. 匹配 except:按顺序检查,找到则执行对应代码块
  3. 执行 else:若 try 无异常
  4. 执行 finally:无论是否异常,最终执行

(十一) 高级用法:try-except-else-finally 组合

try:# 尝试操作file = open("config.json", "r")
except FileNotFoundError:# 处理缺失配置print("使用默认配置")config = DEFAULT_CONFIG
else:# 无异常时读取配置try:config = json.load(file)except json.JSONDecodeError:print("配置格式错误,使用默认值")config = DEFAULT_CONFIGfinally:file.close()  # 确保文件关闭
finally:# 应用配置apply_config(config)

(十二)异常与性能

  • 异常处理本身不慢,但频繁抛出 / 捕获会影响性能
  • 避免用异常控制常规流程(如循环读取文件)
  • 优先使用条件判断(如 if os.path.exists(file)

相关文章:

Python实现Web请求与响应

目录 一、Web 请求与响应基础 &#xff08;一&#xff09;Web 请求与响应的定义与组成 &#xff08;二&#xff09;HTTP 协议概述 &#xff08;三&#xff09;常见的 HTTP 状态码 二、Python 的 requests 库 &#xff08;一&#xff09;安装 requests 库 &#xff08;二…...

机器学习 day05

文章目录 前言一、模型选择与调优1.交叉验证2.超参数搜索 前言 通过今天的学习&#xff0c;我掌握了机器学习中模型的选择与调优&#xff0c;包括交叉验证&#xff0c;超参数搜索的概念与基本用法。 一、模型选择与调优 模型的选择与调优有许多方法&#xff0c;这里主要介绍较…...

CentOS Stream安装MinIO教程

1. 下载 MinIO 二进制文件 # 进入 MinIO 安装目录 sudo cd /usr/local/bin/# 下载 MinIO 二进制文件&#xff08;替换为最新版本链接&#xff09; wget https://dl.min.io/server/minio/release/linux-amd64/minio chmod x minio2. 创建专用用户和存储目录 # 创建 minio 用户…...

C#新建打开文件对话框

这是Winform直接封装好的打开文件对话框 using System.Windows.Forms; public static string OpenFile(string path) {OpenFileDialog openFileDialog new OpenFileDialog();// 设置对话框属性openFileDialog.Title "选择文件";openFileDialog.InitialDirectory …...

汇川PLC通过开疆智能Profinet转ModbusTCP网关读取西门子PLC数据案例

本案例是客户通过开疆智能Profient转ModbusTCP网关连接汇川PLC的配置案例 Modbus TCP主站即Modbus TCP客户端&#xff0c;Modbus TCP主站最多支持同时与31个Modbus TCP从站 。&#xff08;Modbus TCP服务器&#xff09;进行通信。 第一步设置PLC IP地址&#xff1b; 默认PLC…...

零基础入门:MinerU 和 PyTorch、CUDA的关系

&#x1f4a1;一句话总结&#xff1a;MinerU 是一个用 PyTorch 跑模型的程序&#xff0c;PyTorch 支持多种加速方式&#xff08;如 CUDA、MPS&#xff09;&#xff0c;让它跑得快就需要依赖这些加速工具。 PyTorch官网安装教程&#xff08;可根据系统情况选择不同版本&#xf…...

借助IEDA ,Git版本管理工具快速入门

01 引言 一直使用SVN作为版本管理工具&#xff0c;直到公司新来的一批同事&#xff0c;看到我们使用的SVN都纷纷吐槽&#xff0c;什么年代了&#xff0c;还使用SVN。聊下来&#xff0c;才知道人家公司早早就将SVN切成了Git工具&#xff0c;并吐槽SVN的各种弊端。 既然新的技术…...

三维空间,毫秒即达:RTMP|RTSP播放器在Unity中的落地实现

有人问我&#xff1a;在 Unity 里做超低延迟的直播播放&#xff0c;是什么感觉&#xff1f; 我说&#xff0c;是把一帧帧流动的时间&#xff0c;嵌进一个三维的空间里。 它不属于现在&#xff0c;也不属于过去。 它属于“实时”——属于那一秒内刚刚发生&#xff0c;却已被你看…...

【计算机网络】HTTP/1.0,HTTP/1.1,HTTP/2,HTTP/3汇总讲解,清晰表格整理面试重点对比

表格汇总 对比维度HTTP/1.0HTTP/1.1HTTP/2HTTP/3传输协议TCPTCPTCP/TLS&#xff08;默认加密&#xff09;UDP&#xff08;基于 QUIC 协议&#xff09;连接方式短连接&#xff08;每次请求/响应后断开&#xff09;引入持久连接&#xff08;Persistent Connection&#xff09;&a…...

ubuntu 搭建FTP服务,接收部标机历史音视频上报服务器

1.安装vsftpd 1.1.安装命令 sudo apt update sudo apt install vsftpd 1.2.备份原始配置文件 sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak 1.3.配置 vsftpd 编辑配置文件 /etc/vsftpd.conf&#xff1a; sudo vim /etc/vsftpd.conf 将以下参数修改为对应值&#xff…...

一、内存调优

一、内存调优 什么是内存泄漏 监控Java内存的常用工具 内存泄露的常见场景 内存泄露的解决方案 内存泄露与内存溢出的区别 内存泄露&#xff1a;在Java中如果不再使用一个对象&#xff0c;但是该对象依然在GC ROOT的引用链上&#xff0c;这个对象就不会被垃圾回收器回收&…...

IDEA启动报错:Cannot invoke “org.flowable.common.engine.impl.persistence.ent

1.问题 项目启动报错信息 java.lang.NullPointerException: Cannot invoke "org.flowable.common.engine.impl.persistence.ent 2.问题解析 出现这个问题是在项目中集成了Flowable或Activiti工作流&#xff0c;开启自动创建工作流创建的表&#xff0c;因为不同环境的数据…...

从加密到信任|密码重塑车路云一体化安全生态

目录 一、密码技术的核心支撑 二、典型应用案例 三、未来发展方向 总结 车路云系统涉及海量实时数据交互&#xff0c;包括车辆位置、传感器信息、用户身份等敏感数据。其安全风险呈现三大特征&#xff1a; 开放环境威胁&#xff1a;V2X&#xff08;车与万物互联&#xff0…...

Java的Filter与Spring的Interceptor的比较

一、技术规范与框架依赖 维度FilterInterceptor所属规范Servlet 规范&#xff08;Java EE 标准组件&#xff09;Spring MVC 框架组件&#xff08;非 Java EE 标准&#xff09;框架依赖不依赖 Spring&#xff0c;仅需 Servlet 容器&#xff08;如 Tomcat&#xff09;依赖 Sprin…...

多线程编程的典型使用场景

前言 在Java开发中&#xff0c;合理使用并发/多线程技术可以显著提升系统性能和资源利用率。本文将通过典型场景代码示例的形式&#xff0c;帮助开发者理解多线程的实际应用价值。 核心使用场景 2.1 高并发请求处理 场景描述&#xff1a; 电商秒杀、票务系统等需要同时处理大…...

grafana dashboard 单位 IEC SI a i

grafana dashboard 画图的时候在 Standard options —> Unit —> Data —> 会有各种选项其中列举以 xxxaxxx 、xxxixxx开头和&#xff08;IEC) (SI) 注释的&#xff0c;本文进行解释 其中带 a 的基于十进制的单位&#xff0c;使用1000作为基数。1 MB 1000 KB 1000 *…...

WPF···

设置启动页 默认最后一个窗口关闭,程序退出,可以设置 修改窗体的icon图标 修改项目exe图标 双击项目名会看到代码 其他 在A窗体点击按钮打开B窗体,在B窗体设置WindowStartupLocation=“CenterOwner” 在A窗体的代码设置 B.Owner = this; B.Show(); B窗体生成在A窗体中间…...

Git的工作流程

1) 初始化仓库&#xff1a;使用 git init 命令在目录中创建新Git仓库 2) 添加文件到暂存区&#xff1a; - git add <文件名> 添加指定文件 - git add . 添加所有修改文件 3) 提交改动&#xff1a;git commit -m "提交信息"&#xff08;注意commit正确拼写…...

微服务架构中的多进程通信--内存池、共享内存、socket

目录 1 引言 2 整体架构简介 3 疑问 3.1 我们的共享内存消息机制是用的posix还是system V 3.2 rmmt中&#xff0c;不同线程之间的比如访问同一个内存&#xff0c;用的什么锁控制的 3.3 疑问&#xff1a;假如一个进程发送给了另外两个进程&#xff0c;然后另外两个进程都同…...

电脑中所有word文件图标变白怎么恢复

电脑中的word文件图标变白&#xff0c;如下图所示&#xff1a; 解决方法&#xff1a; 1.winR-->在弹出的运行窗口中输入“regedit”(如下图所示)&#xff0c;点击确定&#xff1a; 2.按照路径“计算机\HKEY_CLASSES_ROOT\Word.Document.12\DefaultIcon”去找到“&#xff0…...

RK3568 OH5.1 源码编译及问题

安装编译器和二进制工具 在源码根目录下执行prebuilts脚本&#xff0c;安装编译器及二进制工具。 bash build/prebuilts_download.sh在源码根目录执行如下指令安装hb编译工具&#xff1a; python3 -m pip install --user build/hb使用build.sh脚本编译源码 进入源码根目录&…...

Qt5、C++11 获取wifi列表与wifi连接

一、获取wifi列表 .h 文件内容 #include <QWidget> #include <QVBoxLayout> #include <QPushButton> #include <QCheckBox> #include <QListWidget>class Setting : public QWidget {Q_OBJECT public:explicit Setting(QWidget *parent nul…...

【KWDB 2025 创作者计划】_从部署开始了解KWDB

一、概述 KaiwuDB 是一款面向 AIoT 场景的分布式、多模融合、支持原生 AI 的数据库产品&#xff0c;支持同一实例同时建立时序库和关系库并融合处理多模数据&#xff0c;具备时序数据高效处理能力&#xff0c;具有稳定安全、高可用、易运维等特点。面向工业物联网、数字能源、…...

高等数学-微分

一、一元函数&#xff1a; 在实际应用中&#xff0c;经常需要近似计算函数yf(x)的增量Δyf(x)-f(x0)f(x0Δx)-f(x0),其中一种近似称为函数的微分。 定义&#xff1a;若函数yf(x)在点x0处的增量Δy可表达为自变量增量Δx的线性函数AΔx和Δx的高阶无穷小量之和&#xff0c;即Δ…...

有没有开源的企业网盘,是否适合企业使用?

开源选项丰富、灵活定制能力强、需要额外运维投入、适合特定场景但不一定适合所有企业&#xff0c;是开源企业网盘的主要特征。从表面看&#xff0c;开源网盘往往具有免费或低成本优势&#xff0c;但企业要投入一定的人力与技术资源来完成安装、维护与升级&#xff0c;从而保障…...

基于系统整合的WordPress个性化配置方法深度解析:从需求分析到实现过程

文章目录 引言一、理解WordPress页面与文章的区别二、主题与模板层级&#xff1a;自定义的基础三、自定义页面模板&#xff1a;打造专属页面风格四、自定义文章模板&#xff1a;打造个性化文章呈现五、使用自定义字段和元数据&#xff1a;增强内容灵活性六、利用WordPress钩子&…...

离线服务器Python环境配置指南

离线服务器Python环境配置指南&#xff1a;避坑与实战 0. 场景分析&#xff1a;当服务器与世隔绝时 典型困境&#xff1a; 无法访问国际网络&#xff08;如PyPI、Conda官方源&#xff09;服务器处于内网隔离环境安全策略限制在线安装 解决方案矩阵&#xff1a; 方法适用场…...

(第94天)OGG 微服务搭建 Oracle 19C CDB 架构同步

前言 Oracle GoldenGate Microservice Architecture (OGGMA) 是在 OGG 12.3 版本推出的全新架构。相比传统架构,OGGMA 基于 Rest API,通过 WEB 界面即可完成 OGG 的配置和监控,大大简化了部署和管理流程。 本文将详细介绍如何在 Oracle 19C CDB 环境中部署 OGG 19.1.0.4 微…...

参与开发的注意事项

1.开发期间&#xff0c;不要擅自修改架构的内容 使用技术官发的项目文件夹来开发&#xff0c;而不是自己建立项目&#xff0c; 否则会导致环境不统一 架构内容&#xff1a;&#xff08;不能更改&#xff09; 1.类型定义&#xff0c;全局变量声明 2.函数申明&#xff08;函数名称…...

使用pm2 部署react+nextjs项目到服务器

记录一下 next.config.js中&#xff1a; output: standalone,package.json配置&#xff1a; "scripts": {"dev": "cross-env NODE_OPTIONS--inspect next dev","build": "next build","start": "cp -r .nex…...