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

Rust 开发的高性能 HTTP 请求工具

一、简述

在现在的软件开发领域,HTTP请求的快速验证变得越来越重要。特别是对于后端开发人员和测试工程师来说,能够快速创建、执行并验证HTTP请求对于提升开发效率至关重要。近期有一个名为Hurl的开源项目,它被设计来高效执行HTTP请求,这也是我今天聊的主题。

二、项目概述

Hurl是由Orange Open Source团队开发的一个命令行工具,能够执行HTTP请求的同时对返回的响应内容进行断言检查。Hurl的使用场景非常广泛,适用于API测试、文件下载、网站抓取等场合。它的特性包括支持同时发送多个HTTP请求、支持模板引擎、具有详细的日志输出等。

三、安装Hurl

在开始详细解析前,我们需要先对Hurl进行安装。Hurl支持多种操作系统,包括Linux、macOS和Windows。这里我给出一种在Linux系统中安装Hurl的示例。

# 下载最新的Hurl版本
wget https://github.com/Orange-OpenSource/hurl/releases/download/1.0.0/hurl_1.0.0_linux_x86_64.deb# 安装deb包
sudo dpkg -i hurl_1.0.0_linux_x86_64.deb

以上代码展示了如何通过下载.deb软件包来安装Hurl。当然,你也可以通过其他方式如源码编译等来安装,这取决于你的操作系统和偏好。

四、使用Hurl发送请求

安装完成后,我们可以进行第一个HTTP请求的发送了。我们将发起一个简单的GET请求到httpbin.org网站。

hurl "http://httpbin.org/get"

执行上述命令后,Hurl会发起请求并展示出HTTP响应

五、结合Hurl和断言

Hurl的一个显著特点是它提供了断言功能。这意味着你可以对响应的状态码、头部、体等做出预期,并让Hurl来验证这些预期是否满足。例如,如果我们想验证上述请求返回的状态码是否为200,我们可以这样写:

GET http://httpbin.org/get
HTTP/* 
200

保存这段内容为test.hurl文件,使用以下命令执行:

hurl --file test.hurl

如果状态码不是200,Hurl会返回错误信息。

六、Hurl文件格式

Hurl使用了自己的文件格式来组织请求和预期断言。文件格式简洁明了,易于阅读和编写。一个完整的Hurl文件包含一个或多个HTTP请求,以及与之对应的断言。

GET http://httpbin.org/getHTTP/1.1 200

上面是一个最简单的Hurl文件示例,请求了httpbin.org/get并期待返回一个200的状态码。

七、复杂请求与Hurl

Hurl同样支持更复杂的HTTP请求场景,比如携带查询参数、设置请求头等。这里是一个POST请求的示例,请求传递了JSON格式的数据,并设置了内容类型头部。

POST http://httpbin.org/post
Content-Type: application/json{"name": "hurl", "type": "http tool"}HTTP/* 200

这段代码展示了如何使用Hurl发送POST请求和JSON数据,同时断言响应的状态码为200。

八、结合变量和模板

Hurl支持使用变量和模板来构建动态的请求。这对于需要动态生成请求内容的自动化测试尤其有价值。例如:

GET http://httpbin.org/anything
X-Test: {{ random_uuid() }}HTTP/1.1 200

上述示例中使用了模板函数random_uuid()来生成一个随机的UUID,并作为请求头X-Test的值发送。

九、Hurl的日志和调试功能

在使用Hurl时,有时可能会出现意料之外的错误。这时候Hurl的详细日志和调试功能就显得非常有用。你可以使用–verbose选项来获取详细的执行日志。

hurl --file test.hurl --verbose

这会输出每个执行步骤的详细信息,帮助你快速定位问题。

十、Hurl的进一步应用

除了直接用作API测试,Hurl还可以被集成到CI/CD管道中,自动化进行服务监控或部署时的健康检查。它的轻量级和高效性使得它在自动化测试领域获得了广泛的应用。

十一、总结

Hurl作为一个开源工具,为HTTP请求的发送与验证提供了一个非常方便的命令行界面。通过详细的日志、灵活的断言机制以及模板功能,它可以极大地提升API的测试效率和准确性。如果你在进行API开发或测试,那么Hurl无疑是一个值得尝试的工具。

相关文章:

Rust 开发的高性能 HTTP 请求工具

一、简述 在现在的软件开发领域,HTTP请求的快速验证变得越来越重要。特别是对于后端开发人员和测试工程师来说,能够快速创建、执行并验证HTTP请求对于提升开发效率至关重要。近期有一个名为Hurl的开源项目,它被设计来高效执行HTTP请求&#…...

Android Studio 通过 WIFI 调试手机 app

操作流程 首先第一步,PC 和手机都需要连在同一个局域网 WIFI。 第二步,手机 USB 连上 PC,确保能查看到通过 USB 连上的设备: >>adb devices List of devices attached CSXasjdhwjqwjhqdh device (最好只看到一个连上的设置…...

RabbitMQ高级笔记

视频链接:【黑马程序员RabbitMQ入门到实战教程】 文章目录 1.发送者的可靠性1.1.生产者重试机制1.2.生产者确认机制1.3.实现生产者确认1.3.1.开启生产者确认1.3.2.定义ReturnCallback1.3.3.定义ConfirmCallback 2.MQ的可靠性2.1.数据持久化2.1.1.交换机持久化2.1.2.…...

【Qt】QtCreator交叉编译环境配置Qt mkspec

1、问题描述 在QtCreator中配置TI AM437x的交叉编译环境后,编译时报错,错误信息如下 error: gnu/stubs-soft.h: No such file or directory2、原因分析 1)环境变量CC 搜索网络,解决方法为修改交叉编译工具目录下环境配置脚本,即执行source时的文件。 本人环境为:linux…...

点点数据K参数加密逆向分析(RPC方案跟加密算法还原)

文章目录 1. 写在前面2. 接口分析3. 断点分析4. RPC调用5. 算法还原 【🏠作者主页】:吴秋霖 【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长…...

考研数学|《1800》+《660》精华搭配混合用(经验分享)

肯定不行,考研数学哪有这么容易的! 先说说这两本习题册,李永乐老师推出的新版660题,相较于18年前的版本,难度略有降低,更加适合初学者。因此,对于处于基础阶段的学习者来说,新版660…...

【Redis 二】Redis客户端(Jedis、SpringDataRedis、RedisTemplate)

1. Redis客户端 Jedis 以redis命令作为方法名称,学习成本低,但是Jedis实例是线程不安全的,多线程环境下需要基于连接池来使用(必须为每个线程分配独立的Jedis连接) lettuce 基于Netty实现,支持同步、异步和…...

Java中Filter和Interceptor的区别

概述 本文阐述Java中Filter和Interceptor的区别。 执行顺序不同 FIlter->Servlet->Interceptor->Controller 配置方式不同 FIlter在web.xml中配置 Interceptor在spring中的配置文件中、使用注解 是否依赖servlet Filter依赖servlet,而Interceptor不…...

记一次 pdfplumber 内存泄漏导致的服务器宕机

有一个项目需求,要在每天凌晨5点的时候执行一个任务,获取一系列的PDF文件并解析。 后端是Django框架,定时任务用Celery来实现的。 本地跑没什么问题,但是一放到服务器上跑就会宕机,而且是毫无征兆的宕机,…...

SpringBoot单元测试剖析

SpringBoot作为一种流行的Java框架,其单元测试的重要性不言而喻。在这篇博客中,我们将深入剖析SpringBoot单元测试的底层原理。 单元测试的概念 单元测试是软件开发过程中的一个重要环节,它是对软件中的最小可测试单元进行检查和验证。对于…...

【华为OD机试C++】计算某字符出现次数

文章目录 描述输入描述输出描述示例代码 描述 写出一个程序,接受一个由字母、数字和空格组成的字符串,和一个字符,然后输出输入字符串中该字符的出现次数。(不区分大小写字母) 数据范围: 1 \le n \le 1000 …...

ORA-01779 BYPASS_UJVC 11.2后废弃了

有这么个update语句 update A t set status 1 where exists (select 1 from B B where B.code A.code) 因性能问题需要修改写法。 在oracle10G这么update是没问题的: update( select …...

验证码demo(简单实现)

前言 我们注意到我们登录网站的时候经常会用到网络验证码,今天我们就简单实现一个验证码的前后端交互问题,做一个小demo 准备 我们这里并不需要依靠原生的java来实现,而是只需要引入一个maven依赖,使用现成的封装好的即可,这是我使用的是hutool工具包 网址:Hutool🍬…...

C#面:虚函数和抽象函数的区别

C#中的虚函数和抽象函数都是实现多态性的重要概念,但它们有一些区别。 定义方式: 虚函数:在基类中使用 virtual 关键字定义,可以在派生类中被重写。抽象函数:在抽象类或接口中使用abstract 关键字定义,必…...

Vidmore Video Fix for Mac 视频修复工具

Vidmore Video Fix for Mac是一款功能强大且易于使用的视频修复工具,专为Mac用户设计。它凭借先进的视频修复技术,能够帮助用户解决各种视频问题,如视频文件损坏、无法播放、格式不支持等。 软件下载:Vidmore Video Fix for Mac v…...

Docker容器与虚拟化技术:OpenEuler 部署 Docker UI

目录 一、实验 1.环境 2.OpenEuler 部署 docker-compose-ui 2.OpenEuler 部署 docker ui 3.使用cpolar内网穿透 二、问题 1.docker run -w 的作用 一、实验 1.环境 (1)主机 表1 主机 系统架构版本IP备注LinuxopenEuler22.03 LTS SP2 192.168…...

328——二维矩阵值变为1最小操作次数 next、nextInt、nextLine

一、next、nextInt、nextLine区别 1.next() next()不光是接收键盘输入的内容,而且还进行分割。例如默认分隔符为空格 Scanner sc new Scanner(System.in);while (true){String str sc.next();System.out.println(str "A");}// 输出结果 input&#…...

HarmonyOS 应用开发之同步任务开发指导 (TaskPool和Worker)

同步任务是指在多个线程之间协调执行的任务,其目的是确保多个任务按照一定的顺序和规则执行,例如使用锁来防止数据竞争。 同步任务的实现需要考虑多个线程之间的协作和同步,以确保数据的正确性和程序的正确执行。 由于TaskPool偏向于单个独…...

基于MiniExcel的三种常用导出Excel方法(固定列导出、动态列导出、按模板导出)

为了方便代码编写和测试,把很多代码都放在一个class里面,实际开发根据需要放到对应的目录下即可。 1.使用nuget下载安装miniexcel; 2.编写对应的测试接口,具体代码如下: using Microsoft.AspNetCore.Authorization; using Micr…...

MATLAB科研绘图与学术图表绘制从入门到精通

💂 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】🤟 一站式轻松构建小程序、Web网站、移动应用:👉注册地址🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交…...

嘉立创PCB打样被加价到170元?手把手教你用STM32H743飞控板案例解决‘拆单嫌疑’

STM32H743飞控板PCB打样避坑指南:如何巧妙应对嘉立创拆单判定 最近不少硬件开发者在使用嘉立创进行STM32H743飞控板PCB打样时,遇到了一个令人头疼的问题——原本33元的4层板打样价格突然飙升到170多元。这种情况往往是由于平台算法误判设计文件存在"…...

Mermaid Live Editor:代码驱动图表的革新者,重新定义技术可视化流程

Mermaid Live Editor:代码驱动图表的革新者,重新定义技术可视化流程 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trendin…...

Z-Image-Turbo_Sugar脸部Lora模型服务运维指南:监控、日志与故障排查

Z-Image-Turbo_Sugar脸部Lora模型服务运维指南:监控、日志与故障排查 最近在帮一个做创意设计的朋友维护他们的AI图像生成服务,他们用的就是Z-Image-Turbo_Sugar这个专门生成特定风格人脸的Lora模型。朋友跟我吐槽,说服务时不时就“抽风”&a…...

OpenRouter最新免费额度调整:如何用微信支付宝充值解锁1000次/天API调用

OpenRouter API调用新规解析:微信支付宝充值实战指南 最近OpenRouter平台对免费API调用额度进行了重要调整,这一变化直接影响着国内开发者和AI爱好者的日常使用体验。作为聚合了300多个主流AI模型的统一接口平台,OpenRouter一直以友好的免费政…...

多平台资源嗅探与下载工具:解决网络资源获取难题的技术方案

多平台资源嗅探与下载工具:解决网络资源获取难题的技术方案 【免费下载链接】res-downloader 资源下载器、网络资源嗅探,支持微信视频号下载、网页抖音无水印下载、网页快手无水印视频下载、酷狗音乐下载等网络资源拦截下载! 项目地址: https://gitcod…...

如何用baidupankey解决百度网盘提取码获取难题

如何用baidupankey解决百度网盘提取码获取难题 【免费下载链接】baidupankey 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 引言:被提取码困住的日常 "又要找提取码?"小张盯着电脑屏幕上的百度网盘分享链接,…...

开源工具优化Cursor API调用:突破限制提升开发效率的完整方案

开源工具优化Cursor API调用:突破限制提升开发效率的完整方案 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached y…...

管道巡检软体机器人 YOLOv8 模型部署全流程(PT→ONNX→昇腾OM)

项目背景:本项目针对搭载摄像头的管道内部巡检软体机器人开发,实现管道内部缺陷、障碍物、异物的实时AI检测,完成从PC端训练到边缘端部署的完整链路。 开源仓库:AtomGit 公开仓库 适配设备:香橙派AIPro(搭…...

3个维度解析G-Helper:华硕笔记本性能优化的轻量级解决方案

3个维度解析G-Helper:华硕笔记本性能优化的轻量级解决方案 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models 项目…...

HeliOS:面向嵌入式设备的零上下文切换RTOS

1. 项目概述HeliOS 是一款面向资源受限嵌入式设备的轻量级、开源、免费使用的实时内核(RTOS),其定位并非传统意义上的通用操作系统,而是一个高度可裁剪、零上下文切换开销的多任务调度内核。它专为 Arduino、ARM Cortex-M 等低功耗…...