动手造轮子 —— dotnet-HTTPie

2023-11-05 23:08
文章标签 动手 dotnet 轮子 httpie

本文主要是介绍动手造轮子 —— dotnet-HTTPie,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

动手造轮子 —— dotnet-HTTPie

Intro

HTTPie 是一个基于 Python 的 HTTP CLI 工具,这也意味着想用 HTTPie 就需要安装 Python 环境,不想装 Python 环境,于是想用 C# 也写一个类似的东西,HTTPie 的语法很简单、简洁而且功能强大,基本可以完全取代 cURL,最近写了一个类似的工具 dotnet-HTTPie,遵循着 HTTPie 的语法,HTTPie 怎么用使用  dotnet-HTTPie 基本也是一样的,简化 API 的测试

安装

dotnet-HTTPie 是一个 dotnet tool,所以你可以按照 dotnet tool 的安装方式来进行安装

使用下面的命令来安装最新的稳定版 dotnet-HTTPie

dotnet tool install --global dotnet-httpie

如果想要使用最新的预览版,可以使用下面的命令:

dotnet tool install --global dotnet-httpie --version *-*

使用指南

语法如下:

http [flags] [Method] URL [item [item]]

常用的 HTTP Method 都是支持的 OPTIONS/HEAD/GET/POST/PUT/DELETE/PATCH 都是支持的

item 支持三种:

类型语法
QueryStringname==test
HeaderX-Api-Key:test
Request-Dataname=test, raw data field example(Only effective for JSON): age:=10, job:='{"Id":1,"Name":"test"}'(Escape needed for Windows)

Sample1

http -v https://reservation.weihanli.xyz/health

output:

GET /health HTTP/1.1
Host: reservation.weihanli.xyz
Schema: https
Content-Type: application/json;charset=utf-8
User-Agent: dotnet-HTTPie/0.1.0HTTP/1.1 200 OK
Connection: keep-alive
Date: Tue, 03 Aug 2021 14:40:00 GMT
Server: nginx/1.14.1
Transfer-Encoding: chunkedhealthy

不指定 HTTP Method 并且没有 Request Data 的时候默认方法是 GET

-v 代表 --verbose 要输出所有的请求和响应信息,包括请求头、请求body、响应头和响应body,默认地只输出响应头和响应消息体,你也可以通过 --print 来更精确的控制输出选项,例如只打印请求和响应头信息可以用:--print=Hh

H:request headers, B:request body,

h:response headers, b:response body

Sample2

http -v https://reservation.weihanli.xyz/health hello==world Api-Version:2.0 name=XiaoMing age:=10 flag:=true job:='{"id":1,"name":"tester"}'

output:

POST /health?hello=world HTTP/1.1
Host: reservation.weihanli.xyz
Schema: https
Api-Version: 2.0
Content-Type: application/json;charset=utf-8
User-Agent: dotnet-HTTPie/0.1.0{"name":"XiaoMing","age":10,"flag":true,"job":{"id":1,"name":"tester"}}HTTP/1.1 200 OK
Connection: keep-alive
Date: Tue, 03 Aug 2021 14:39:18 GMT
Server: nginx/1.14.1
Transfer-Encoding: chunkedhealthy

因为没有指定 HTTP Method 又包含 request data,所以默认方法是 POST

默认的有 Request Data 的时候,会把数据组装成 JSON,并且会指定 Content-Typeapplication/json 如上所示,如果想要使用 form 方式可以指定 -f--form

Docker

我们也提供了基于 docker 的使用方式,可以使用 weihanli:dotnet-httpie:latest 来获取最新的镜像,目前 docker 镜像是在 runtime 的镜像里装了一下这个 dotnet tool,实现方式可以参考:在 dotnet runtime 的容器中安装 dotnet global tool 以及文末的项目源码

Design

基于中间件的设计,通过不同的中间件处理不同的参数(flag

目前一共分成三种中间件

  • HttpHandlerMiddleware

  • RequestMiddleware

  • ResponseMiddleware

// HttpHandlerMiddleware
serviceCollection.AddHttpHandlerMiddleware<FollowRedirectMiddleware>().AddHttpHandlerMiddleware<HttpSslMiddleware>();
// RequestMiddleware
serviceCollection.AddRequestMiddleware<QueryStringMiddleware>().AddRequestMiddleware<RequestHeadersMiddleware>().AddRequestMiddleware<RequestDataMiddleware>().AddRequestMiddleware<DefaultRequestMiddleware>();
// ResponseMiddleware
serviceCollection.AddResponseMiddleware<DefaultResponseMiddleware>();

通过中间件来扩展不同的功能,想要支持新的参数和功能注册一个自定义的中间件即可

这里借用一下 asp.net core 的中间件的图

More

我们还提供了一些特别的特性,比如:

  • 指定 --offline 可以打印请求头和请求 Body 而不发送请求

  • 针对 localhost 的请求我们可以简化,比如访问 http://localhost:5000/api/values 可以使用 :5000/api/values 来访问,默认的 schema 是 http,如果是 https://localhost:5001/api/values,可以通过 --schema=https 来指定 schema,完整脚本:http --schema=https :5001/api/values

更多功能等你来发掘~~

目前还只支持比较基本和我觉得比较常用的功能还有一些功能需要增加和改进,有兴趣的童鞋欢迎 issue 欢迎 PR

dotnet-HTTPie 会支持绝大部分 HTTPie 的功能并将优化和改进一些用着不太方便的地方,如果你是 curl 用户,有大佬做了一个从 curl 到 HTTPie 的工具,可以参考: https://curlipie.now.sh/

References

  • https://github.com/WeihanLi/dotnet-httpie

  • HTTPie docs: https://httpie.io/docs

  • Curl to HTTPie request tool: https://curlipie.now.sh/

这篇关于动手造轮子 —— dotnet-HTTPie的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/353043

相关文章

动手学深度学习【数据操作+数据预处理】

import osos.makedirs(os.path.join('.', 'data'), exist_ok=True)data_file = os.path.join('.', 'data', 'house_tiny.csv')with open(data_file, 'w') as f:f.write('NumRooms,Alley,Price\n') # 列名f.write('NA

Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(4)

本文仅作笔记学习和分享,不用做任何商业用途 本文包括但不限于unity官方手册,unity唐老狮等教程知识,如有不足还请斧正​​ Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(3)-CSDN博客  这节就是真正的存储数据了   理清一下思路: 1.存储路径并检查 //2进制文件类存储private static string Data_Binary_Pa

Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(3)

本文仅作笔记学习和分享,不用做任何商业用途 本文包括但不限于unity官方手册,unity唐老狮等教程知识,如有不足还请斧正​​ Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(2) (*****生成数据结构类的方式特别有趣****)-CSDN博客 做完了数据结构类,该做一个存储类了,也就是生成一个字典类(只是声明)  实现和上一节的数据结构类的方式大同小异,所

【动手学深度学习】04 数据操作 + 数据预处理(个人向笔记)

数据操作 N维数组是机器学习和神经网络的主要数据结构其中 2-d 矩阵中每一行表示每一行表示一个样本 当维度来到三维的时候则可以表示成一张图片,再加一维就可以变成多张图片,再加一维则可以变成一个视频 访问元素 冒号表示从冒号左边的元素到冒号右边的前一个元素(开区间),其中如果左边为空,那么表示从第一个开始,如果右边为空,那么表示访问到最后一个,如果两边都为空,则表示全部访问其中一行中我们指

【造轮子】纯C++实现的联通组件标记算法

学习《OpenCV应用开发:入门、进阶与工程化实践》一书 做真正的OpenCV开发者,从入门到入职,一步到位! 连接组件标记算法 连接组件标记算法(connected component labeling algorithm-CCL)是图像分析中最常用的算法之一,算法的实质是扫描一幅图像的每个像素,对于像素值相同的分为相同的组(group),最终得到图像中所有的像素连通组件。扫描的方式可以是从

Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(2) (*****生成数据结构类的方式特别有趣****)

本文仅作笔记学习和分享,不用做任何商业用途 本文包括但不限于unity官方手册,unity唐老狮等教程知识,如有不足还请斧正​​ Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(1)-CSDN博客 本节内容 实现目标 通过已经得到的Excel表格数据,生成对应类对象(不赋值),一张表就是一个对象,其中包含了如下的字段  就像这样子  实现思路 上

How to apply streaming in azure openai dotnet web application?

题意:"如何在 Azure OpenAI 的 .NET Web 应用程序中应用流式处理?" 问题背景: I want to create a web api backend that stream openai completion responses. "我想创建一个 Web API 后端,用于流式传输 OpenAI 的完成响应。" How can I apply the f

小白入门LLM大模型最牛X教程------上交《动手学大模型应用开发》!

本项目是一个面向小白开发者的大模型应用开发教程,旨在结合个人知识库助手项目,通过一个课程完成大模型开发的重点入门,涵盖了大模型应用开发的方方面面,主要包括: 教程一共有七章内容: 《动手学大模型》是上海交大 更新的系列编程实践教程。从已经跟新的内容来看,侧重安全垂直方向。命名是向他们的学长李沐的《动手学深度学习》课程致敬。 感受下大纲、课件和教程风格: 微调与部署 提示学习与思维

B端系统门门清之:KMS-知识沉淀池,杜绝重复造轮子。

KMS(知识管理系统)在公司的作用越来越大,毕竟任何公司从不想员工从0开始学习,去做一件事情,都想让员工踩在巨人的肩膀上更进一步,本文就为大家解读KMS系统。什么是KMS系统?KMS系统对于公司来说有什么价值?KMS系统必备的功能模块有哪些?AI时代到来,对于KMS系统来说有什么机遇和挑战。 一、什么是KMS系统 Knowledge Management System(KMS,知识管理系统)是

动手学深度学习8.2. 文本预处理-笔记练习(PyTorch)

本节课程地址:代码_哔哩哔哩_bilibili 本节教材地址:8.2. 文本预处理 — 动手学深度学习 2.0.0 documentation (d2l.ai) 本节开源代码:...>d2l-zh>pytorch>chapter_multilayer-perceptrons>text-preprocessing.ipynb 文本预处理 对于序列数据处理问题,我们在 8.1节 中 评估了