当前位置: 首页 > 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端打造的:👉轻量化工具创作平台💅 想寻找共同学习交…...

C++核心高级编程 --- 1、内存分区模型 2、引用

文章目录 第一章:1.内存分区模型1.1 程序运行前1.2 程序运行后1.3 new操作符 第二章:2.引用2.1 使用2.2 注意事项2.3 做函数参数2.4 做函数返回值2.5 本质2.6 常量引用 第一章: 1.内存分区模型 4个区域: 代码区:存放…...

winform日历控件_进度条控件

在 Windows Forms 应用程序中使用日历控件 (如 MonthCalendar 或 DateTimePicker) 和进度条控件 (如 ProgressBar) 是一个很好的练习,以了解这些控件的工作方式。以下是一些基本的步骤来实践这些控件: 日历控件: 添加 MonthCalendar 控件&am…...

Java进阶-反射的详解与应用

本文深入探讨了Java反射机制的核心概念、应用实例及其在现代Java开发中的重要性。文章首先介绍了反射的基本原理和能力,包括在运行时动态获取类信息、操作对象字段和方法的能力。随后,通过具体代码示例,展示了如何利用反射进行字段访问、方法…...

蓝桥杯算法题——暴力枚举法

先估算这个数小于3的50次方 cnt0 for i in range(50):for j in range(50):for k in range(50):a3**ib5**jc7**kif a*b*c<59084709587505:cnt1 print(cnt-1)#当ijk都为0时&#xff0c;a*b*c1不是幸运数字所以要减去...

【教程】Kotlin语言学习笔记(六)——泛型

写在前面&#xff1a; 如果文章对你有帮助&#xff0c;记得点赞关注加收藏一波&#xff0c;利于以后需要的时候复习&#xff0c;多谢支持&#xff01; 【Kotlin语言学习】系列文章 第一章 《认识Kotlin》 第二章 《数据类型》 第三章 《数据容器》 第四章 《方法》 第五章 《L…...

【中文视觉语言模型+本地部署 】23.08 阿里Qwen-VL:能对图片理解、定位物体、读取文字的视觉语言模型 (推理最低12G显存+)

项目主页&#xff1a;https://github.com/QwenLM/Qwen-VL 通义前问网页在线使用——&#xff08;文本问答&#xff0c;图片理解&#xff0c;文档解析&#xff09;&#xff1a;https://tongyi.aliyun.com/qianwen/ 论文v3. : 一个全能的视觉语言模型 23.10 Qwen-VL: A Versatile…...

【Qt 学习笔记】Qt 背景介绍

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt 背景介绍 文章编号&#xff1a;Qt 学习笔记 / 01 文章目录 Qt 背景…...

C++递推算法

数塔问题 #include<bits/stdc.h> using namespace std; void f(int,int,int); int a[100][100]; int n; int main() {cin>>n;for(int i0;i<n;i){for(int j0;j<1i;j){cin>>a[i][j];}}for(int in-2;i>0;i--){for(int j0;j<i1;j){a[i][j]a[i][j]ma…...

Go项目结构整洁实现|GitHub 3.5k

一、前言 hi&#xff0c;大家好&#xff0c;这里是白泽。今天给大家分享一个GitHub &#x1f31f; 3.5k 的 Go项目&#xff1a;go-backend-clean-arch https://github.com/amitshekhariitbhu/go-backend-clean-architecture 这个项目是一位老外写的&#xff0c;通过一个 HTT…...

Python读取PDF文字 去掉页眉页脚

使用PyMuPDF&#xff08;即fitz&#xff09;读取PDF中的text时&#xff0c;会把页码也读进来。所以&#xff0c;有时候就需要让程序忽略页眉和页脚&#xff0c;或者直接删除页眉和页脚。 根据fitz的文档&#xff1a;Page - PyMuPDF 1.24.0 documentation get_text的clip参数可…...

企业网站seo策略/最新疫情最新情况

一、 Thread类的基本用法 通过System.Threading.Thread类可以开始新的线程&#xff0c;并在线程堆栈中运行静态或实例方法。可以通过Thread类的的构造方法传递一个无参数&#xff0c;并且不返回值&#xff08;返回void&#xff09;的委托(ThreadStart)&#xff0c;这个委托的定…...

网站建设项目的预表/快速优化系统

导读&#xff1a; ActiveSync应用层程序协议分析-RAPI的握手过程 转载时请注明出处和作者联系方式作者联系方式&#xff1a;李先静 ActiveSync与Window Mobile之间的通信协议并不复杂&#xff0c;在RNDISUSBNET之上运行TCP/IP&#xff0c;而TCP/IP之上的应用层协议包括RAPI和RR…...

做微网站用哪个平台/seo免费优化网站

2019独角兽企业重金招聘Python工程师标准>>> 考虑提供一种网络功能, 教师在自己机器上面画图, 能够显示给学生; 或获取学生的图形, 并在其 基础上修改绘制, 学生能看到画图过程. 设学生机器为S, 教师机器为T, 服务器为V. 一般思路: S,T 通过服务器V连接, 通过V传输…...

利用店铺网站做灰色优化/安卓系统优化app

开头 这是一次代码优化过程中发现的问题&#xff0c;在功能优化后发现部分数据查不到出来了&#xff0c;问题就在于一条sql上的#和$。 下图为两条sql&#xff1a; 从图上可以看出 wwlr.LabelId in(${showLabels}) 和 wwlr.LabelId in(#{showLabels})&#xff0c;其中showLabe…...

做灯箱到哪个网站找业务/商务网站建设

在从数据库中读取数据时最好直接在select语句中加入选择条件&#xff0c;从而直接限制筛选出符合条件的数据&#xff0c;而不建议读出所有的数据然后用ABAP代码来过滤筛选。 例如&#xff0c;不建议使用&#xff1a; Select * from zflight. Check : zflight-airln ‘LF’ a…...

衡水网站建设在哪里/网络推广合同

根据某些条件,我必须对角切割列表单元格.为此,我使用以下代码制作了对角线可绘制图像&#xff1a;对角线android:top"0dp"android:bottom"0dp">android:fromDegrees"315"android:toDegrees"315"android:pivotX"0%"androi…...