动手造轮子 —— 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/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/299922.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于JavaScript技术的横排文字转古书式竖排工具

基于JavaScript技术的横排文字转古书式竖排工具 此工具可以把普通横排文字转换为古典的竖排由右至左的方式显示&#xff0c;并且增加适当的线标&#xff0c;方便读者阅读。您可以在论坛、博客发言之前用这个工具把要发表的文章转化&#xff0c;然后再粘贴到要发表的论坛、博客上…

减肥瘦不下来的原因找到了

全世界只有3.14 %的人关注了青少年数学之旅&#xff08;图源蜻蜓队长&#xff0c;侵权删&#xff09;

新装机器如何修改IP地址

1、Linux系统下如何设置IP地址&#xff1f;我们可以通过命令设定IP的方法&#xff0c;不过此方法的前提条件是用户需root权限。在Linux系统的 /etc/sysconfig/network-script/ifcfg-eth0文件中存放着网卡IP地址配置的相关信息&#xff0c;它的具体格式为&#xff1a;   [root…

大数据、java、python、区块链、人工智能哪个发展前景更好?

在这个信息时代高速发展的情况下&#xff0c;很多人会对自己该往哪个方向发展感到迷茫&#xff0c;下面我就浅显的给大家介绍一下五大流行区域的发展前景。 大数据的发展前景&#xff1a; 当前大数据行业真的是人才稀缺吗? 学了几年后&#xff0c;大数据行业会不会产能过剩…

2020年CNCF和开源项目开发速度

作者&#xff1a;Chris Aniszczyk回到 2017 年&#xff0c;我们洞察[1]了当时速度&#xff08;velocity&#xff09;最高的 30 个开源项目&#xff0c;结果非常有趣。今年&#xff0c;我们想看看 CNCF 的项目速度&#xff0c;以及 2020 年速度最高的 30 个开源项目。此外&#…

automation服务不能创建对象

automation服务器不能创建对象 昨天开机打开Visual Studio.Net&#xff0c;准备新建一个项目&#xff0c;却发生一件奇怪的事情&#xff0c;系统报告“automation服务器不能创建对象”错误。然后在解决方案中只见项目名&#xff0c;而不见项目文件了。真是奇怪。再尝试打开已有…

又一中国机械狗来了:腾跃呼啦圈、原地起跳顶飞皮球,还能自主充电

全世界只有3.14 %的人关注了青少年数学之旅哇这是什么情况竟然腾空后跳过了呼啦圈这是刚刚升级的新机械狗说起机械狗其实浙江大学也搞了一只名叫“绝影”就是刚才咱们看到的那只绝影也迭代好几次了说白了就是一代一代的升级了上楼梯、跑步都是稳如狗退也退的潇洒这只机械狗确切…

一个不错的游戏 - flash webgame

http://122.50.3.133:8080/iah/flash/Main.swf 让自己伤感,难道我永远没机会开发webgme?转载于:https://www.cnblogs.com/vilyLei/archive/2009/06/17/1505174.html

Http协议Get方式获取图片

一、 二、 我试了试&#xff0c;Post方式也行啊&#xff0c;干嘛要叫强调Get方式&#xff0c;费解~~ 答曰&#xff1a;get是向服务器请求数据&#xff0c;post是提交数据。 三、 package com.hpu.test;import java.io.FileOutputStream; import java.io.IOException; import ja…

2018最新大数据职业划分和薪资介绍(大数据从事者须知)

相信接触大数据这个行业的人都知道大数据这个行业涉及很广泛&#xff0c;那么相应的也有很多职业诞生出 来&#xff0c;很多刚刚接触大数据的不知道该往哪方面发展&#xff0c;下面我就给大家介绍一下大数据行业的职业规划。 数据管理类 1&#xff0c;首席数据官 2&#xff…

dotnet 是 前30个增长最快速度的开源项目中排名第一的开发平台

CNCF 的博客 发了一篇文章 《Update on CNCF and Open Source Project Velocity 2020》&#xff0c;中文翻译参见 2020年CNCF和开源项目开发速度, 这个数据在2017年发布过一次&#xff0c;这次是3年来的再次更新的数据&#xff0c;往后每6个月就会更新一次数据-open source pro…

icewm使用心得[转]

http://foxshy.bokee.com/2766429.htmlicewm作为一个轻量级的窗口管理器一直深受大家的喜爱&#xff0c;在国外它的流行程度仅次于WindowMaker。对于一个Ddebin用户来说安装它非常简单&#xff0c;只要一个命令&#xff1a;#apt-get install icewm icewm-common iceconf iceme …

装了卡巴后VS 2003不能启动调试错误的解决方案

机器上同时安装vs2003和 vs2005 vs2005能调试&#xff0c;vs2003不能调试 &#xff0c;提示不在Debug Users权限组 经过一周时间的分析查找&#xff0c;知道问题原因 是ie浏览器的安全设置的问题&#xff0c;没有把当前用户信息带到IIS中。 一定是http://localhost,不能是local…

阿里、腾讯都在用的腰靠,拯救你20岁的身体60岁的腰!

▲ 点击查看在之前小木推荐“德国MINICUTE人体工学腰垫”受到了大家一致的好评和争相购买。小木为什么推荐这一款原因是&#xff1a;据统计&#xff0c;我国腰椎病患者已经突破2亿人。30~40岁人群中&#xff0c;患有颈腰椎病的占比59.1%&#xff01;而且有着越来越年轻化的趋…

Java中的Enum(枚举)用法介绍

1. 关于Java Enum: 学过C/C等语言的人&#xff0c;应该都对Enum类型略知一二。Enum一般用来表示一组相同类型的常量。如性别、日期、月份、颜色等。对这些属性用常量的好处是显而易见的&#xff0c;不仅可以保证单例&#xff0c;且比较时候可以用””来替换equals。是一种好的习…

Hadoop会遇到的45个问题,你确定你了解吗?

本文这里为大家分享Hadoop集群设置中经常出现的一些问题。 在工作生活中&#xff0c;有些问题非常简单&#xff0c;但往往搜索半天也找不到所需的答案&#xff0c;在Hadoop的学习与使用过程中同样如此。关注WX公众号&#xff1a;大数据技术工程师。可免费领取hadoop学习资料。这…

不同国家的视力表也不一样!| 今日趣图

全世界只有3.14 %的人关注了青少年数学之旅微信聊天的时候女生说洗澡去了你要怎么回答&#xff1f;&#xff08;图源二营长笑了&#xff0c;侵权删&#xff09;不同国家的视力表也不一样&#xff01;中国的视力表是这样的日本的视力表是这样的美国的视力表是这样的&#xff08;…

自定义EventSource(三)IncrementingEventCounter

在自定义EventSource时&#xff0c;可以使用四种EventCounter&#xff1a;EventCounter&#xff1a;统计指标收集器&#xff0c;比如平均值&#xff0c;最大值&#xff0c;最小值PollingCounter&#xff1a;自定义统计指标收集器&#xff0c;通过自定义统计方法的方式实现对指标…

TAR命令参数详解[转]

http://sujian.blog.51cto.com/8838/3456TAR命令名tar - tar 档案文件管理程序的 GNU 版本。下面将逐个介绍其含义 总览tar [ - ] A --catenate --concatenate | c --create | d --diff --compare | r --append | t --list | u --update | x -extract --get [ --atime-preserve…

SQL日期获取

当前日期 select CONVERT(varchar(10), getdate(), 120) 一个月第一天的SQL 脚本&#xff1a; SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0) 本周的星期一 SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0) 一年的第一天 SELECT DATEADD(yy, DATEDIFF(yy,…