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

使用 Visual Studio 2022 中的 .http 文件

转自微软技术文档:

https://learn.microsoft.com/zh-cn/aspnet/core/test/http-files?view=aspnetcore-9.0

Visual Studio 2022.http 文件编辑器提供了一种便捷的方式来测试 ASP.NET Core项目,尤其是 API 应用。 编辑器提供一个 UI,用于:

  • 创建和更新 .http 文件。
  • 发送 .http 文件中指定的 HTTP 请求。
  • 显示响应。
  • 本文包含以下文档:

.http 文件语法。

  • 如何创建 .http 文件。
  • 如何从 .http 文件发送请求。
  • 在哪里可以找到可配置的 .http 文件选项。
  • 如何使用 Visual Studio 2022 终结点资源管理器在 .http 文件中创建请求。
  • .http 文件格式和编辑器受 Visual Studio Code REST 客户端扩展的启发。 Visual Studio 2022 .http 编辑器将 .rest 识别为相同文件格式的替代文件扩展名。


先决条件
安装了“ASP.NET 和 Web 部署”工作负载的 Visual Studio 2022 版本 17.8 或更高版本。

.http 文件语法

 以下部分介绍 .http 文件语法。

请求

HTTP 请求的格式为 HTTPMethod URL HTTPVersion,全部在一行上,其中:

  • HTTPMethod 是要使用的 HTTP 方法,例如:
    • OPTIONS
    • GET
    • HEAD
    • POST
    • PUT
    • PATCH
    • DELETE
    • TRACE
    • CONNECT
  • URL 是向其发送请求的 URL。 此 URL 可以包括查询字符串参数。 此 URL 不必指向本地 Web 项目。 它可以指向 Visual Studio 可以访问的任何 URL。
  • HTTPVersion 是可选的,指定应使用的 HTTP 版本,即 HTTP/1.1、HTTP/2 或 HTTP/3。

通过使用行 ### 作为分隔符,文件可以包含多个请求。 以下示例在一个文件中显示了三个请求,说明了此语法:

GET https://localhost:7220/weatherforecast###GET https://localhost:7220/weatherforecast?date=2023-05-11&location=98006###GET https://localhost:7220/weatherforecast HTTP/3###

请求标头

     若要添加一个或多个标头,请将每个标头立即添加到请求行后其自己的行中。 不要在请求行与第一个标头之间或后续标头行之间包含任何空白行。 格式为 HeaderName: Value,如以下示例所示:

GET https://localhost:7220/weatherforecast
Date: Wed, 27 Apr 2023 07:28:00 GMT###GET https://localhost:7220/weatherforecast
Cache-Control: max-age=604800
Age: 100###

 请求正文

在空白行后面添加请求正文,如以下示例所示:

POST https://localhost:7220/weatherforecast
Content-Type: application/json
Accept-Language: en-US,en;q=0.5{"date": "2023-05-10","temperatureC": 30,"summary": "Warm"
}###

注释

以 # 或 // 开头的行是注释。 当 Visual Studio 发送 HTTP 请求时,将忽略这些行。


变量

以 @ 开头的行使用语法 @VariableName=Value 定义变量。

可以在稍后在文件中定义的请求中引用变量。 通过用双大括号括起名称 {{ 和 }} 来引用它们。 以下示例演示在请求中定义和使用的两个变量:

@hostname=localhost
@port=44320
GET https://{{hostname}}:{{port}}/weatherforecast

可以使用文件前面定义的其他变量的值来定义变量。 以下示例在请求中使用一个变量,而不是前面示例中所示的两个变量:

@hostname=localhost
@port=44320
@host={{hostname}}:{{port}}
GET https://{{host}}/api/search/tool

环境文件

若要在不同的环境中为变量提供不同的值,请创建名为 http-client.env.json 的文件。 在 .http 文件所在的同一目录中或其中一个父目录中找到该文件。 下面是环境文件的示例:

{"dev": {"HostAddress": "https://localhost:44320"},"remote": {"HostAddress": "https://contoso.com"}
}

环境文件是一个 JSON 文件,其中包含一个或多个命名环境,例如前面示例中的“dev”和“remote”。 每个命名环境都包含一个或多个变量,例如前面的示例中的 HostAddress。 从环境文件中引用变量的方式与其他变量相同,如以下示例所示:

GET {{HostAddress}}/api/search/tool

发送请求时用于变量的值由 .http 文件编辑器右上角的环境选择器下拉列表确定。 以下屏幕截图显示了选择器

环境文件不必位于项目文件夹中。 Visual Studio 在 .http 文件所在的文件夹中查找环境文件。 如果它不在该文件夹中,Visual Studio 会浏览父目录来查找它。 找到名为 http-client.env.json 的文件后,搜索将结束。 将使用最接近 .http 文件的文件。

创建或编辑 .http 文件后,可能需要关闭并重新打开项目,以查看环境选择器中反映的更改。 按 F6 选择环境选择器。

Visual Studio 在以下情况下显示警告:

  • .http 文件引用了未在 .http 文件或环境文件中定义的变量。
  • 环境文件包含 .http 文件中未引用的变量。

在环境文件中定义的变量可以与 .http 文件中定义的变量相同,也可以不同。 如果在 .http 文件和环境文件中都定义了变量,则 .http 文件中的值将替代环境文件中的值。

共享变量

$shared 是针对在多个环境中相同的值的特殊环境名称。 例如,请考虑以下环境文件 (http-client.env.json):

{"$shared": {"HostAddress": "https://localhost:7293"},"dev1": {"username": "dev1user"},"dev2": {"username": "dev2user"},"staging": {"username": "staginguser","HostAddress": "https://staging.contoso.com"}
}

在前面的示例中,$shared 环境定义值为 localhost:7293 的 HostAddress 变量。 值为 HostAddress 的 localhost:7293 变量将在未定义 HostAddress 的环境中作为默认值。 定义 dev1 或 dev2 环境时,HostAddress 的值来自 $shared 环境,因为 dev1 和 dev2 不定义 HostAddress 变量。 定义 staging 环境时,HostAddress 的值设置为 https://staging.contoso.com,并替代 $shared 默认值。

请求变量

可以将值从一个 HTTP 请求传递到同一 .http 文件中的另一个 HTTP 请求。

  1. 创建位于请求 URL 之前的单行注释,以命名以下请求。 例如,以下行显示了命名请求 login的替代方法:
# @name login
https://contoso.com/api/login HTTP/1.1
// @name login
https://contoso.com/api/login HTTP/1.1

        2.在同一 HTTP 文件中的后续请求中,使用请求名称来引用请求。

        3.使用以下语法提取所需响应的特定部分。

{{<request name>.(response|request).(body|headers).(*|JSONPath|XPath|<header name>)}}.

使用此语法可以从请求本身或从响应中提取值(request|response)。 对于请求或响应,可以从正文或标头(body|headers)中提取值。

选择 body 时,语法 *|JSONPath|XPath 部分适用:

  • * 提取整个响应正文。

                示例: {{login.response.body.*}}

  • 对于 JSON 响应,请使用 JSONPath 提取某个特定属性。

                示例: {{login.response.body.$.token}}

  • 对于 XML 响应,请使用 XPath 提取特定属性或特性。

                示例: {{login.response.body./token}}

选择 headers 后,标头名称将提取整个标头。 标头名称不区分大小写。

        示例: {{login.response.headers.Location}}

如果要引用命名请求的响应,则需要手动触发命名请求以先检索其响应。 从响应中提取值时,如果请求已多次发送,则会收到最新的响应。

请求变量用法示例

例如,假设 HTTP 文件有一个对调用方进行身份验证的请求,并将它命名为 login。 响应正文是一个 JSON 文档,其中包含名为 token的属性中的持有者令牌。 在后续请求中,你需要在 Authorization 标头中传入此持有者令牌。 以下示例演示如下操作:

# @name loginPOST {{TodoApi_HostAddress}}/users/token 
Content-Type: application/json { "username": "{{myusername}}", 
} ### GET {{TodoApi_HostAddress}}/todos 
Authorization: Bearer {{login.response.body.$.token}}###

语法 {{login.response.body.$.token}} 表示持有者令牌:

  • login:请求名称。
  • response:指 HTTP 响应对象。
  • body:指 HTTP 响应的正文。
  • $:表示响应正文中 JSON 文档的根元素。
  • token:指 JSON 文档中的特定属性。

如果不使用请求变量,则需要从登录响应中手动提取令牌,并将其包含在后续请求的标头中。 通过请求变量,可以自动执行此过程。


特定于用户的环境文件

特定于用户的值是开发人员想要测试但不想与团队共享的任何值。 默认情况下,http-client.env.json 文件提交至源代码管理,因此,切勿 向此文件添加用户特定的值。 相反,在名为 http-client.env.json.user 的文件中添加特定于用户的值。 http-client.env.json.user 文件位于与 http-client.env.json 文件相同的文件夹中。 使用 Visual Studio 源代码控制功能时,默认情况下会从源代码控制中排除以 .user 结尾的文件。

加载 http-client.env.json 文件时,Visual Studio 会查找同级 http-client.env.json.user 文件。 如果在 http-client.env.json 文件和 http-client.env.json.user 文件中的环境中都定义了变量,则 http-client.env.json.user 文件中的值优先级更高。

以下示例方案演示了特定于用户的环境文件工作原理。 假设 .http 文件包含以下内容:

GET {{HostAddress}}/{{Path}}
Accept: application/json

假设 http-client.env.json 文件包含以下内容:

{"dev": {"HostAddress": "https://localhost:7128","Path": "/weatherforecast"},"remote": {"HostAddress": "https://contoso.com","Path": "/weatherforecast"}
}

假设有一个特定于用户的环境文件,其中包含以下内容:

{"dev": {"Path": "/swagger/index.html"}
}

当用户选择“开发”环境时,将向 https://localhost:7128/swagger/index.html 发送请求,因为 Path 文件中的 http-client.env.json.user 值会替代 http-client.env.json 文件中的值。

使用相同的环境文件,假设变量已在 .http 文件中定义:

@HostAddress=https://contoso.com
@Path=/weatherforecastGET {{HostAddress}}/{{Path}}
Accept: application/json

在此场景中,“dev”环境请求将发送到 https://contoso.com/weatherforecast,因为 .http 文件中的变量定义会替代环境文件定义。

ASP.NET Core 用户机密

若要从用户机密获取值,请使用与 ASP.NET Core 项目位于相同文件夹的环境文件。 在环境文件中,定义具有 provider 和 secretName 属性的变量。 将 provider 值设置为 AspnetUserSecrets,并将 secretName 设置为所需用户机密的名称。 例如,以下环境文件定义一个名为 ApiKeyDev 的变量,它的值获取自 config:ApiKeyDev 用户机密:

{"dev": {"ApiKeyDev": {"provider": "AspnetUserSecrets","secretName": "config:ApiKeyDev"}}
}

若要在 .http 文件中使用此变量,请像标准变量一样引用它。 例如:

GET {{HostAddress}}{{Path}}
X-API-KEY: {{ApiKeyDev}}

发送请求时,ApiKeyDev 机密的值位于 X-API-KEY 标头中。

键入 http 文件时,编辑器会显示变量名称的完成列表,但不会显示其值。

Azure Key Vault

Azure Key Vault 是 Azure 中可用于管理机密的多个密钥管理解决方案之一。 在当前支持 .http 文件的三种机密存储中,Key Vault 是跨不同用户共享机密的最佳选择。 其他两个选项(ASP.NET User Secrets 和 DPAPI 加密)不容易共享。

若要使用 Azure Key Vault 中的值,必须使用有权访问所需 Key Vault 的帐户登录到 Visual Studio。 使用元数据在环境文件中定义变量以访问机密。 在以下示例中,变量名为 AKVSecret:

{"dev": {"AKVSecret": {"provider": "AzureKeyVault","secretName": "SecretInKeyVault","resourceId": "/subscriptions/3a914c59-8175a9e0e540/resourceGroups/my-key-vault-rg/providers/Microsoft.KeyVault/vaults/my-key-vault-01182024"}}
}

AKVSecret 变量从 Azure Key Vault 拉取其值。 AKVSecret 上定义了以下属性:

名称    描述
提供程序对于密钥保管库,请始终使用 AzureKeyVault。
secretName要提取的机密的名称 。
resourceId    要访问的特定密钥保管库的 Azure 资源 ID。

可以在 Azure 门户中找到 resourceId 属性的值。 转到“设置>属性”来查找它。 对于 secretName,请使用 Azure 门户中“机密”页上显示的机密名称。

例如,下面的 .http 文件具有使用此机密值的请求。

GET {{HostAddress}}{{Path}}
X-AKV-SECRET: {{akvSecret}}


DPAPI 加密

Windows 上的数据保护 API (DPAPI) 可用于加密敏感数据。 使用 DPAPI 加密数据时,加密的值始终特定于计算机,并且它们在 .http 文件中也特定于用户。 这些值无法与其他用户共享。

若要加密值,请使用以下控制台应用程序:

using System.Security.Cryptography;
using System.Text;string stringToEncrypt = "Hello, World!";
byte[] encBytes = ProtectedData.Protect(Encoding.Unicode.GetBytes(stringToEncrypt), optionalEntropy: null, scope: DataProtectionScope.CurrentUser);
string base64 = Convert.ToBase64String(encBytes);
Console.WriteLine(base64);

前面的控制台应用程序引用了 System.Security.Cryptography.ProtectedData NuGet 包。 若要使加密值能够在 .http 文件中工作,请在加密时将范围设置为 DataProtectionScope.CurrentUser。 加密值是 base64 编码的字符串,可以复制并粘贴到环境文件中。

在环境文件中,创建一个具有 provider 和 value 属性的变量。 将 provider 设置为 Encrypted,并将加密值设置为 value。 例如,以下环境文件定义一个名为 dpapiValue 的变量,它的值获取自使用 DPAPI 加密的字符串。

{"dev": {"dpapiValue": {"provider": "Encrypted","value": "AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAA5qwfg4+Bhk2nsy6ujgg3GAAAAAACAAAAAAAQZgAAAAEAACAAAAAqNXhXc098k1TtKmaI4cUAbJVALMVP1zOR7mhC1RBJegAAAAAOgAAAAAIAACAAAABKu4E9WC/zX5LYZZhOS2pukxMTF9R4yS+XA9HoYF98GzAAAAAzFXatt461ZnVeUWgOV8M/DkqNviWUUjexAXOF/JfpJMw/CdsizQyESus2QjsCtZlAAAAAL7ns3u9mEk6wSMIn+KNsW/vdAw51OaI+HPVrt5vFvXRilTtvGbU/JnxsoIHj0Z7OOxlwOSg1Qdn60zEqmlFJBg=="}}
}

在上述环境文件中,dpapiValue 可以像任何其他变量一样在 .http 文件中使用。 例如:

GET {{HostAddress}}{{Path}}
X-DPAPI-Secret: {{dpapiSecret}}

发送此请求后,X-DPAPI-Secret 具有解密的机密值。

环境变量

若要获取环境变量的值,请使用 $processEnv。 以下示例将 USERNAME 环境变量的值置于 X-UserName 标头中。

GET {{HostAddress}}{{Path}}
X-UserName: {{$processEnv USERNAME}}

如果试图使用 $processEnv 访问不存在的环境变量,.http 文件编辑器将显示一条错误消息。

.env 文件

若要获取 .env 文件中定义的变量的值,请使用 $dotenv。 .env 文件必须位于项目文件夹中。 $dotenv 和 $processEnv 的格式相同。 例如,如果 .env 文件具有以下内容:

USERNAME=userFromDotenv

且 .http 文件包含此内容:

GET {{HostAddress}}{{Path}}
X-UserName: {{$dotEnv USERNAME}}

X-UserName 标头将具有“userFromDotenv”。

在编辑器中输入 $dotenv 时,它显示 .env 文件中定义的变量的完成情况。

随机整数

若要生成随机整数,请使用 $randomInt。 语法是 {{$randomInt [min max]}}, min 和 max 值是可选的。

日期和时间

  • $datetime 生成 UTC 格式的 datetime 字符串。 语法是 {{$datetime [format] [offset option]}},其中格式和偏移选项是可选的。
  • $localDatetime 在本地时区中生成 datetime 字符串。 语法是 {{$localDatetime [format] [offset option]}},其中格式和偏移选项是可选的。
  • $timestamp 生成 UTC 格式的 timestamp。 timestamp 是从 Unix 时间戳开始所经过的秒数(UTC 时间)。 语法是 {{$timestamp [offset option]}},其中偏移选项是可选的。

选项 [format] 是 rfc1123、iso8601 或用引号表示的自定义格式。 例如:

GET https://httpbin.org/headers
X-CUSTOM: {{$datetime "dd-MM-yyyy"}}
X-ISO8601: {{$datetime iso8601}}
X-ISO8601L: {{$localDatetime iso8601}}
X-RFC1123: {{$datetime rfc1123}}
X-RFC1123L: {{$localDatetime rfc1123}}

以下是前面的示例生成的一些示例值:

{"headers": {"X-Custom": "17-01-2024","X-Iso8601": "2024-01-17T22:59:55.5345770+00:00","X-Iso8601L": "2024-01-17T14:59:55.5345770-08:00","X-Rfc1123": "Wed, 17 Jan 2024 22:59:55 GMT","X-Rfc1123L": "Wed, 17 Jan 2024 14:59:55 -08"}
}

语法 [offset option] 采用 numberunit 形式,其中 number 是整数,unit 是以下值之一:

unit说明
ms毫秒
s
m分钟
h时数
d
w
M数月
y年数

例如:

GET https://httpbin.org/headers
X-Custom-Minus-1-Year: {{$datetime "dd-MM-yyyy" -1 y}}
X-RFC1123-Plus-1-Day: {{$datetime rfc1123 1 d}} 
X-Timestamp-Plus-1-Year: {{$timestamp 1 y}}

以下是前面的示例生成的一些示例值:

{"headers": {"X-Custom-Minus-1-Year": "17-01-2023","X-Rfc1123-Plus-1-Day": "Thu, 18 Jan 2024 23:02:48 GMT","X-Timestamp-Plus-1-Year": "1737154968"}
}

前面的一些示例使用免费的开源网站 <httpbin.org>。 这是一个与 Microsoft 无关的第三方网站。 在这些示例中,它会返回一个响应正文,其中包含在请求中发送的标头。 有关使用此资源进行 API 测试的其他方法的信息,请参阅 httpbin.org 网站的主页。

不支持的语法

Visual Studio 2022 .http 文件编辑器不具备 Visual Studio Code REST 客户端扩展拥有的所有功能。 以下列表包含一些仅在 Visual Studio Code 扩展中可用的更重要的功能:

  • 跨多行的请求行
  • 将文件路径指定为请求正文
  • 使用 multipart/form-data 时正文的混合格式
  • GraphQL 请求
  • cURL 请求
  • 复制/粘贴为 cURL
  • 请求历史记录
  • 将响应正文保存到文件
  • 基于证书的身份验证
  • 提示变量
  • 自定义响应预览
  • 每请求设置

创建 .http 文件

  • 在“解决方案资源管理器”中,右键单击 ASP.NET Core 项目。
  • 在上下文菜单中,选择“添加”“新建项...”。
  • 在“添加新项”对话框中,选择“ASP.NET Core”“常规”。
  • 选择“HTTP 文件”,然后选择“添加”。

发送 HTTP 请求

  • 向 文件添加至少一个.http并保存该文件。
  • 如果请求 URL 指向 localhost 和项目的端口,请在尝试向其发送请求之前运行项目。
  • 选择直接位于要发送的请求上方的 Send Request 或 Debug 链接。
  • 请求将发送到指定 URL,响应将显示在编辑器窗口右侧的单独窗格中。

.http 文件选项

可以配置 .http 文件行为的某些方面。 若要查看可用内容,请转到工具>选项>文本编辑器>其余。 例如,可以在“高级”选项卡上配置超时设置。下面是“选项”对话框的屏幕截图:

使用终结点资源管理器

终结点资源管理器是一个工具窗口,显示 Web API 定义的所有终结点。 借助该工具,可使用 .http 文件将请求发送到终结点。

终结点资源管理器显示的初始终结点集是静态地发现的。 有些终结点无法被静态地发现。 例如,在类库项目中定义的终结点直到运行时才能被发现。 运行或调试 Web API 时,Visual Studio 版本 17.11 预览版还会在运行时动态地发现终结点,并将这些终结点添加到终结点资源管理器。

打开终结点资源管理器

选择“查看”“其他 Windows”>“终结点资源管理器”。

向 .http 文件添加请求

在“终结点资源管理器”中右键单击请求,然后选择“生成请求”。

  • 如果存在项目名用作文件名的 .http 文件,则会将请求添加到该文件。
  • 否则,会创建项目名用作文件名的 .http 文件,并且将请求添加到该文件。

前面的屏幕截图显示了由最小 API 项目模板定义的终结点。 以下示例显示为所选终结点生成的请求:

GET {{WebApplication1_HostAddress}}/weatherforecast/
Accept: application/json###

相关文章:

使用 Visual Studio 2022 中的 .http 文件

转自微软技术文档&#xff1a; https://learn.microsoft.com/zh-cn/aspnet/core/test/http-files?viewaspnetcore-9.0 Visual Studio 2022.http 文件编辑器提供了一种便捷的方式来测试 ASP.NET Core项目&#xff0c;尤其是 API 应用。 编辑器提供一个 UI&#xff0c;用于&am…...

相得益彰 — 基于 GraphRAG 事理图谱驱动的实时金融行情新闻资讯洞察

*本文为亚马逊云科技博客文章&#xff0c;仅用于技术分享&#xff0c;不构成投资建议或金融决策支持。文中涉及的公司名称仅用于技术示例&#xff0c;不代表亚马逊云科技观点或与这些公司的商业合作关系。 背景介绍 在当今这个信息爆炸的时代&#xff0c;金融市场每天都在产生…...

为什么this与super不能出现在同一构造器的原因

在 Java 中&#xff0c;this() 和 super() 不能同时出现在同一个构造器中&#xff0c;因为它们都必须作为构造器的第一条语句&#xff0c;而一个构造器的第一条语句只能有一个。以下是详细解释和示例&#xff1a; ⚠️ 核心规则 只能二选一&#xff1a; 每个构造器的第一条语句…...

Linux:网络基础

hello&#xff0c;各位小伙伴&#xff0c;本篇文章跟大家一起学习《Linux&#xff1a;网络基础》&#xff0c;感谢大家对我上一篇的支持&#xff0c;如有什么问题&#xff0c;还请多多指教 &#xff01; 如果本篇文章对你有帮助&#xff0c;还请各位点点赞&#xff01;&#xf…...

C++入门篇(下)

目录 1、引用 1.1 引用概念 1.2 引用特性 1.3 常引用 1.4 使用场景 1.4.1 引用做参数 1.4.2 引用做返回值 1.5 引用和指针的区别 2、内联函数 2.1 概念 2.2 特性 3、auto关键字 4、基于范围的for循环 5、指针空值nullptr 5.1 C98 中的指针空值处理 5.2 C11 …...

QCustomPlot中自定义QCPAbstractPlottable绘图元素

QCPAbstractPlottable 是 QCustomPlot 中所有可绘制图形(如曲线、柱状图等)的基类。要创建自定义的绘图元素&#xff0c;通常需要继承这个类并实现其纯虚函数。 基本步骤 继承 QCPAbstractPlottable 实现必要的纯虚函数 添加自定义属性和方法 注册到 QCustomPlot 系统 完…...

【Bluedroid】蓝牙 HID 设备信息加载与注册机制及配置缓存系统源码解析

本篇解析Android蓝牙子系统加载配对HID设备的核心流程&#xff0c;通过btif_storage_load_bonded_hid_info实现从NVRAM读取设备属性、验证绑定状态、构造描述符并注册到BTA_HH模块。重点剖析基于ConfigCache的三层存储架构&#xff08;全局配置/持久设备/临时设备&#xff09;&…...

【计算机视觉】CV实战项目 - PCC-Net 人群计数

PCC-Net 人群计数项目 项目特点项目运行方式与步骤1. 环境准备2. 数据准备3. 模型训练4. 实验结果 常见问题及解决方法 PCC-Net&#xff08;Perspective Crowd Counting via Spatial Convolutional Network&#xff09;是一个用于人群计数的深度学习项目&#xff0c;旨在通过空…...

Towards Transferable Targeted 3D Adversarial Attack in the Physical World--阅读笔记

目录 简介&#xff1a; 背景&#xff1a; 挑战&#xff1a; 目的&#xff1a; 技术细节&#xff1a; 贡献&#xff1a; ​​1. NeRF的核心作用&#xff1a;3D重建与参数化表示​​ ​​2. 对抗优化的创新&#xff1a;NeRF参数空间的双优化​​ ​​2.1 传统方法的局限…...

​opencv图像库编程

一、下载安装 opencv 1.1 下载安装包 1.2 解压缩 unzip opencv-3.4.11.zip 解压缩以后主目录文件夹如下&#xff1a; 1.3 进入到解压后的文件夹中 cd opencv-3.4.11 二、使用 cmake安装opencv 2.1 进入 root 用户&#xff0c;并更新一下 sudo su sudo apt-get update …...

星拍相机APP:时尚与科技的完美融合,打造你的专属美

在数字时代&#xff0c;手机相机不仅是记录生活的工具&#xff0c;更是表达个性和创意的平台。今天&#xff0c;我们要介绍的 星拍相机APP&#xff0c;就是这样一款匠心制作的手机相机应用。它融合了时尚与科技&#xff0c;提供了多样化的魔法美颜功能&#xff0c;让每一次拍摄…...

puzzle(0531)脑力航迹

目录 脑力航迹 规则 解法 简单模式 中等模式 困难模式 专家模式 脑力航迹 规则 2条航迹会产生一个相对航迹&#xff1a; 根据相对航迹和其中一个航迹推导另外一个航迹。 解法 没有任何需要推理的地方&#xff0c;就是纯粹的2个矢量相加。 简单模式 中等模式 困难模…...

【英语语法】词法---形容词

目录 形容词1. 形容词的核心功能2. 形容词的位置(1) 前置定语&#xff08;最常见&#xff09;(2) 后置定语&#xff08;特殊情况&#xff09;(3) 表语位置&#xff08;系动词后&#xff09; 3. 形容词的比较级与最高级(1) 规则变化(2) 不规则变化(3) 用法对比 4. 多个形容词修饰…...

理解 React 的 useEffect

文章目录 React 的 useEffect一、什么是副作用&#xff08;Side Effects&#xff09;&#xff1f;二、useEffect 的基本用法三、依赖数组的三种情况1. 无依赖数组&#xff08;每次渲染后都执行, 不推荐&#xff09;2. 空依赖数组&#xff08;仅在挂载时执行一次&#xff09;3. …...

2.1 基于委托的异步编程方法

基于委托的异步编程模型是 .NET 早期版本中实现异步操作的一种方式,主要通过 BeginInvoke 和 EndInvoke 方法来实现。这种基于委托的异步模式已被 Task 和 async/await 模式取代,但在维护旧代码时仍可能遇到这种模式。 委托的方法中:Invoke用于同步调用; 而BeginInvoke与E…...

对于在线教育或知识付费类网站视频处理方案

一、视频格式&#xff1a; 1. 推荐格式&#xff1a;HLS&#xff08;HTTP Live Streaming&#xff09; 优势‌&#xff1a; ‌自适应码率‌&#xff1a;根据用户网络状况自动切换清晰度&#xff0c;避免卡顿。‌广泛兼容性‌&#xff1a;iOS/macOS 原生支持&#xff0c;Android…...

Gen - CDPT举例说明:动态上下文前缀(输入先和标签结合,输出结果会更贴近标签内容)

Gen - CDPT举例说明:动态上下文前缀(输入先和标签结合,输出结果会更贴近标签内容) 目录 Gen - CDPT举例说明:动态上下文前缀(输入先和标签结合,输出结果会更贴近标签内容)输入文本示例Gen - CDPT模型处理过程示例什么是:提示次优动态前缀提示方法生成与这条评论上下文…...

UCSC CTF 2025|MISC

1、USB flag{ebdfea9b-3469-41c7-9070-d7833ecc6102} 2、three part1是图片隐水印 part1&#xff1a;8f02d3e7 part2是2进制变换 -ce89-4d6b-830e- Part3先从pass.pcapng得到密码字典 解压缩密码&#xff1a;thinkbell 3个部分合并得到flag{8f02d3e7-ce89-4d6b-830e-5d0cb5…...

FTP客户端实现(文件传输)

文章目录 &#x1f9f1; 一、FTP 基础架构回顾&#x1f680; 二、FTP 客户端的核心结构&#x1f517; 三、连接与登录过程&#x1f4cc; 1. ftp_create()&#x1f4cc; 2. ftp_connect()&#x1f4cc; 3. ftp_login() &#x1f4c1; 四、上传文件实现&#xff08;ftp_upload_fi…...

状态管理最佳实践:Bloc架构实践

状态管理最佳实践&#xff1a;Bloc架构实践 引言 Bloc (Business Logic Component) 是Flutter中一种强大的状态管理解决方案&#xff0c;它基于响应式编程思想&#xff0c;通过分离业务逻辑和UI表现层来实现清晰的代码架构。本文将深入探讨Bloc的核心概念、实现原理和最佳实践…...

嵌入式人工智能应用-第三章 opencv操作 5 二值化、图像缩放

嵌入式人工智能应用 嵌入式人工智能应用-第三章 opencv操作 5 二值化 嵌入式人工智能应用1 二值化1.1 概念介绍1.2 函数介绍1.2 基本应用1.3 参考案例 2 图像缩放2.1 基本概念2.2 函数介绍2.3 基本参考代码2.4 pyrUp 和 pyrDown 函数2.5 函数介绍2.6 参考代码2.7 总结 1 二值化…...

[OS_7] 访问操作系统对象 | offset | FHS | Handle

实验代码可以看去年暑假的这篇文章&#xff1a;【Linux】进程间通信&#xff1a;详解 VSCode使用 | 匿名管道 我们已经知道&#xff0c;进程从 execve 后的初始状态开始&#xff0c;可以通过 mmap 改变自己的地址空间&#xff0c;通过 fork 创建新的进程&#xff0c;再通过 exe…...

【Vulkan 入门系列】创建帧缓冲、命令池、命令缓存,和获取图片(六)

这一节主要介绍创建帧缓冲&#xff08;Framebuffer&#xff09;&#xff0c;创建命令池&#xff0c;创建命令缓存&#xff0c;和从文件加载 PNG 图像数据&#xff0c;解码为 RGBA 格式&#xff0c;并将像素数据暂存到 Vulkan 的 暂存缓冲区中。 一、创建帧缓冲 createFramebu…...

Linux 进程控制(自用)

非阻塞调用waitpid 这样父进程就不会阻塞&#xff0c;此时循环使用我们可以让父进程执行其他任务而不是阻塞等待 进程程序替换 进程PCB加载到内存中的代码和数据 替换就是完全替换当前进程的代码段、数据段、堆和栈&#xff0c;保存当前的PCB 代码指的是二进制代码不是源码&a…...

FreeSWITCH 简单图形化界面41 - 批量SIP视频呼叫测试

FreeSWITCH 简单图形化界面41 - 批量视频测试 0、界面预览00、安装测试工具1、注册分机2、设置接听选项2.1 上传媒体文件2.2 设置接听设置 3、呼叫测试 0、界面预览 http://myfs.f3322.net:8020/ 用户名&#xff1a;admin&#xff0c;密码&#xff1a;admin FreeSWITCH界面安…...

通过爬虫方式实现头条号发布视频(2025年4月)

1、将真实的cookie贴到代码目录中toutiaohao_cookie.txt文件里,修改python代码里的user_agent和video_path, cover_path等变量的值,最后运行python脚本即可; 2、运行之前根据import提示安装一些常见依赖,比如requests等; 3、2025年4月份最新版; 代码如下: import js…...

《AI大模型应知应会100篇》第28篇:大模型在文本创作中的应用技巧

第28篇&#xff1a;大模型在文本创作中的应用技巧 &#x1f9e0; 摘要 在内容为王的时代&#xff0c;AI大模型正在重塑文本创作的每一个环节。从创意构思到风格润色&#xff0c;从论文报告到小说脚本&#xff0c;AI不仅是创作者的助手&#xff0c;更是灵感的激发器。本文将带你…...

字节跳动发布UI-TARS-1.5,入门AI就来近屿智能

近日&#xff0c;字节跳动在 Hugging Face 平台正式开源了其最新多模态代理模型——UI-TARS-1.5。作为 UI-TARS 系列的革新之作&#xff0c;该模型以视觉语言模型为基础&#xff0c;突破性实现跨平台 GUI 自动化交互&#xff0c;为自动化与智能交互领域注入了强劲动能。无论是开…...

大数据学习栈记——MapReduce技术

本文介绍hadoop中的MapReduce技术的应用&#xff0c;使用java API。操作系统&#xff1a;Ubuntu24.04。 MapReduce概述 MapReduce概念 MapReduce是一个分布式运算程序的编程框架&#xff0c;核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序…...

GO语言入门:常用数学函数2

14.6 大型数值 math/big 包中公开了一些实用 API&#xff0c;用于表示大型整数值和浮点数值。当基础类型无法容纳要使用的数值时&#xff0c;应改用 big 包中提供的新类型。例如 Int、Float 等。 14.6.1 大型整数值之间的运算 若希望让下面两个整数值完成加、减法运算&#…...

Django 使用教程

Django 使用教程 Django 是一个高级的 Python Web 框架&#xff0c;采用了 MTV&#xff08;Model-Template-View&#xff09;设计模式&#xff0c;旨在帮助开发者快速构建高效、可维护的 Web 应用。它有着非常丰富的功能&#xff0c;包括 ORM、用户认证、表单处理、管理后台等…...

deepseek + kimi制作PPT

目录 一、kimi简介二、deepseek生成内容三、生成PPT四、编辑PPT 一、kimi简介 kimi是一款只能ppt生成器&#xff0c;擅长将文本内容生成PPT。 在这里&#xff0c;​​DeepSeek 负责内容生成与逻辑梳理​​&#xff0c;​​Kimi 优化表达与提供设计建议​​。 二、deepseek生…...

C++学习:六个月从基础到就业——内存管理:RAII原则

C学习&#xff1a;六个月从基础到就业——内存管理&#xff1a;RAII原则 本文是我C学习之旅系列的第十九篇技术文章&#xff0c;也是第二阶段"C进阶特性"的第四篇&#xff0c;主要介绍C中的RAII原则及其在资源管理中的应用。查看完整系列目录了解更多内容。 引言 在…...

量子计算与经典计算融合:开启计算新时代

一、引言 随着科技的飞速发展&#xff0c;计算技术正迎来一场前所未有的变革。量子计算作为前沿技术&#xff0c;以其强大的并行计算能力和对复杂问题的高效处理能力&#xff0c;吸引了全球科技界的关注。然而&#xff0c;量子计算并非要完全取代经典计算&#xff0c;而是与经典…...

RV1126网络环境TFTPNFS搭建(二)

二、RV1126 开发板TFTP环境搭建 2.1、Ubuntu下安装和配置 xinetd 执行以下指令&#xff0c;安装 xinetd sudo apt-get install xinetd 执行以下指令创建一个 xinetd.conf 文件 sudo vi /etc/xinetd.conf 修改 xinetd.conf 文件内容如下&#xff1a; # Simple configurat…...

计算机视觉7——齐次坐标与相机内外参

一、透视投影 透视投影&#xff08;Perspective Projection&#xff09;是计算机视觉和图形学中描述三维物体在二维平面成像的基础模型&#xff0c;其核心思想是模拟人类视觉系统的成像原理——中心投影。具体而言&#xff0c;三维空间中的点通过一个固定的投影中心&#xff0…...

学习笔记—C++—string(一)

目录 string 为什么学习string的类 string类的常用接口 string类对象的常见构造 string类对象的访问及遍历操作 operator[] 迭代器 范围for auto 迭代器&#xff08;二&#xff09; string类对象的容量操作 size,length,max_size,capacity,clear基本用法 reserve 提…...

Linux命令-Shell编程

Shell是一个命令行解释器&#xff0c;它接收应用程序/用户命令&#xff0c;然后调用操作系统内核。 写一个hello.sh脚本&#xff1a; 1.mkdir scripts 2.cd scripts 3.touch hello.sh 4.vim hello.sh #!/bin/bash echo "hello,world" 5.bash hello.sh&#xff08…...

基于Django的AI客服租车分析系统

基于Django的AI客服租车分析系统 【包含内容】 【一】项目提供完整源代码及详细注释 【二】系统设计思路与实现说明 【三】AI智能客服与用户交互指导手册 【技术栈】 ①&#xff1a;系统环境&#xff1a;Python 3.8&#xff0c;Django 4.2框架 ②&#xff1a;开发环境&a…...

计算机组成与体系结构:计算机结构的分类(classifications of computer architecture)

目录 Von Neumann Architecture&#xff08;冯诺依曼结构&#xff09; Harvard Architecture&#xff08;哈佛结构&#xff09; Modified Harvard Architecture&#xff08;改进哈佛结构&#xff09; 三种结构对比总结表 &#x1f4a1; 从“内存访问结构”角度分类&#x…...

在阿里云和树莓派上编写一个守护进程程序

目录 一、阿里云邮件守护进程 1. 安装必要库 2. 创建邮件发送脚本 mail_daemon.py 3. 设置后台运行 二、树莓派串口守护进程 1. 启用树莓派串口 2. 安装依赖库 3. 创建串口输出脚本 serial_daemon.py 4. 设置开机自启 5. 使用串口助手接收 一、阿里云邮件守护进程 1.…...

Redis 的几种数据类型

Redis 提供了多种数据类型&#xff0c;以支持不同的应用场景。每种数据类型都有其特定的操作方式&#xff0c;并且在内部实现上也有所优化&#xff0c;能够满足不同的业务需求。以下是 Redis 支持的几种常见数据类型&#xff1a; 1. 字符串&#xff08;String&#xff09; 描…...

Spring之我见 - Spring Boot Starter 自动装配原理

欢迎光临小站&#xff1a;致橡树 Spring Boot Starter 的核心设计理念是 约定优于配置&#xff0c;其核心实现基于 自动配置&#xff08;Auto-Configuration&#xff09; 和 条件化注册&#xff08;Conditional Registration&#xff09;。以下是其生效原理&#xff1a; 约定…...

LeRobot 项目部署运行逻辑(二)—— Mobile Aloha 真机部署

LeRobot 在开源项目中详细说明了部署流程&#xff0c;所以首先看一下开源的内容&#xff0c;然后再逐步拆解 首先&#xff0c;LeRobot 开源的硬件是配全部在 examples 文件夹中 包括了 Stretch 3、Aloha and Aloha 2 stationary、SO-100、LeKiwi、Moss v1 等机器人 恰好实验…...

大模型面经 | 介绍一下CLIP和BLIP

大家好,我是皮先生!! 今天给大家分享一些关于大模型面试常见的面试题,希望对大家的面试有所帮助。 往期回顾: 大模型面经 | 春招、秋招算法面试常考八股文附答案(RAG专题一) 大模型面经 | 春招、秋招算法面试常考八股文附答案(RAG专题二) 大模型面经 | 春招、秋招算法…...

Java发生OOM是否必然导致JVM退出

Java发生OOM是否必然导致JVM退出&#xff1f; 核心结论 不一定。OOM是否导致JVM退出取决于以下因素&#xff1a; OOM发生的区域JVM启动参数配置是否捕获了OOM异常 详细分析 1. 不同内存区域的OOM影响 内存区域错误类型默认是否导致JVM退出可恢复性Java堆OutOfMemoryError…...

Docker Compose 外部网络(`external: true`)与内部网络的区别

Docker Compose 外部网络(external: true)与内部网络的区别 在 Docker Compose 中&#xff0c;external: true 声明的外部网络与普通(内部)网络有重要区别&#xff0c;以下是它们的详细对比&#xff1a; 1. 定义与创建方式 特性外部网络 (external: true)内部网络 (默认)创建…...

【Android】Wallpaper学习

从wallpaper的设置来了解相关内容&#xff1a; 一&#xff0c;静态壁纸 静态壁纸设置的原理是在WallpaperManagerService里监听/data/system/users/0/wallpaper_orig相关文件的变化来触发设置&#xff0c;通过相应的组件程序去进行绘制&#xff0c; 相应的组件如&#xff1a…...

Java基础-第一章、基本数据类型

运算符&#xff1a; 1.算术运算符&#xff1a;加减乘除%等 2.逻辑运算符&#xff1a;与或非等 3.关系运算符&#xff1a;大于、小于... 4.赋值运算符&#xff1a; 这里牵扯运算符的运算先后顺序了。 赋值运算的返回值&#xff1a;就是赋值的变量本身...

《Operating System Concepts》阅读笔记:p748-p748

《Operating System Concepts》学习第 64 天&#xff0c;p748-p748 总结&#xff0c;总计 1 页。 一、技术总结 1.Transmission Control Protocol(TCP) 重点是要自己能画出其过程&#xff0c;这里就不赘述了。 二、英语总结(生词&#xff1a;3) transfer, transport, tran…...