热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

IDEA中的HTTPClient使用教程

这篇文章主要介绍了IDEA中的HTTPClient使用教程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

介绍

IDEA RESTful WebServices是一个类似jmeter,postman的工具。可以使用纯文本编辑。

官网介绍地址:https://www.jetbrains.com/help/idea/restful-webservices.html

该工具是idea的一个组件,在Tools->Http client下;当然goland也是相同;低版本是Test Restful WebService,新版本的idea已经提示改功能废弃,建议使用new HTTP Client也就是我们此教程要介绍的工具;

示例:

创建demo1.http文件

GET https://www.baidu.com

###

点击右侧运行即可查看到结果

HTTP请求中使用变量

要在请求中提供变量,请将其括在双花括号中,如 {{variable}} 。变量名称只能包含字母,数字,下 划线符号 _ 或连字符 - 。

预定义的动态变量

每次您运行请求时,动态变量都会生成一个值: $uuid :生成通用的唯一标识符(UUID-v4) $timestamp :生成当前的UNIX时间戳 $randomInt :生成介于0到1000之间的随机整数。

GET http://localhost/api/get?id={{$uuid}}

创建环境变量

在项目内部,创建以下文件:

  • 在rest-client.env.json(或http-client.env.json)是包含常见的变量,其目的是要与你的项目一起 分发的常规文件。
  • 在rest-client.private.env.json(或http-client.private.env.json)是一个 私人 的文件可能包括密 码,令牌,证书和其他敏感信息。默认情况下,此文件被添加到VCS忽略文件列表中。在httpclient.private.env.json文件中指定的变量的值将覆盖环境文件中的值。
{
 "dev": {
 "host": "http://127.0.0.1:80",
 "name": "zhangsan"
 },
 "prod": {
 "host": "http://127.0.0.1:80",
 "name":"lisi"
 }
}

调用示例

GET http://{{host}}/api/get?name={{name}}

脚本设置环境变量

//设置环境变量
> {%
client.global.set("token", response.body.token);
%}

脚本检测

可以对返回值进行打印,断言;

# 登陆
POST http://{{host}}/system/login
Content-Type: application/x-www-form-urlencoded

username=admin&password=123456

> {%
 client.log(JSON.stringify(response.body));
	client.test("Request executed successfully", function() {
		client.assert(response.status === 200, "Response status is not 200");
	});
	client.test("Response content-type is json", function() {
		var type = response.contentType.mimeType;
		client.assert(type === "application/json", "Expected 'application/json' but received '" + type + "'");
	});
	client.test("Request code success", function() {
		client.assert(response.body.code === 0, "Response code is not 0");
		client.global.set("token", response.body.data);
	});
%}

###

类型介绍

  • client

client.global

  • set(varName, varValue) // 设置全局变量
  • get(varName) // 获取全局变量
  • isEmpty // 检查 global 是否为空
  • clear(varName) // 删除变量
  • clearAll // 删除所有变量
  • client.test(testName, func) // 创建一个名称为 testName 的测试
  • client.assert(condition, message) // 校验条件 condition 是否成立,否则抛出异常 message
  • client.log(text) // 打印日志
  • response
  • response.body // 字符串 或 JSON (如果 content-type 为 application/json .)
  • response.headers

valueOf(headerName) // 返回第一个匹配 headerName 的值,如果没有匹配的返回 null
valuesOf(headerName) // 返回所有匹配 headerName 的值的数组,如果没有匹配的返回空数组

  • response.status // Http 状态码,如: 200 / 400
  • response.contentType

mimeType // 返回 MIME 类型,如: text/plain , text/xml , application/json .
charset // 返回编码 UTF-8 等

示例test.http

###
# GET请求
GET http://{{host}}/api/get?name={{name}}

###

# POST请求
POST http://{{host}}/api/post/kv
Content-Type: application/x-www-form-urlencoded

name=zhangsan&age=11
###

# POST请求
POST http://{{host}}/api/post/json
Content-Type: application/json
referer: https://goframe.org/
COOKIE: name=zhangsan; age=11

{"name":"zhangsan","age":11}
###

test2.http

###
# 未登录
POST http://{{host}}/system/user/info

> {%
 client.log(JSON.stringify(response.body));
	client.test("Request executed successfully", function() {
		client.assert(response.status === 404, "Response status is not 200");
	});
	client.test("Response content-type is json", function() {
		var type = response.contentType.mimeType;
		client.assert(type === "application/json", "Expected 'application/json' but received '" + type + "'");
	});
	client.test("Request code fail", function() {
		client.assert(response.body.code === -1, "Response code is not -1");
	});
%}


###

# 登陆
POST http://{{host}}/system/login
Content-Type: application/x-www-form-urlencoded

username=admin&password=123456
> {%
 client.log(JSON.stringify(response.body));
	client.test("Request executed successfully", function() {
		client.assert(response.status === 200, "Response status is not 200");
	});
	client.test("Response content-type is json", function() {
		var type = response.contentType.mimeType;
		client.assert(type === "application/json", "Expected 'application/json' but received '" + type + "'");
	});
	client.test("Request code success", function() {
		client.assert(response.body.code === 0, "Response code is not 0");
		client.global.set("token", response.body.data);
	});
%}

###

# 登陆后访问用户信息
POST http://{{host}}/system/user/info
token: {{token}}

> {%
 client.log(JSON.stringify(response.body));
	client.test("Request executed successfully", function() {
		client.assert(response.status === 200, "Response status is not 200");
	});
	client.test("Response content-type is json", function() {
		var type = response.contentType.mimeType;
		client.assert(type === "application/json", "Expected 'application/json' but received '" + type + "'");
	});
	client.test("Request code success", function() {
		client.assert(response.body.code === 0, "Response code is not 0");
	});
%}
###

# 登陆后访问用户年龄
POST http://{{host}}/system/user/age
token: {{token}}

> {%
 client.log(JSON.stringify(response.body));
	client.test("Request executed successfully", function() {
		client.assert(response.status === 200, "Response status is not 200");
	});
	client.test("Response content-type is json", function() {
		var type = response.contentType.mimeType;
		client.assert(type === "application/json", "Expected 'application/json' but received '" + type + "'");
	});
	client.test("Request code success", function() {
		client.assert(response.body.code === 0, "Response code is not 0");
	});
%}
###

http-client.env.json

{
 "dev": {
 "host": "http://127.0.0.1:80",
 "name": "zhangsan"
 },
 "prod": {
 "host": "http://127.0.0.1:80",
 "name":"lisi"
 }
}

main.go

package main

import (
	"github.com/gogf/gf/frame/g"
	"github.com/gogf/gf/net/ghttp"
	"github.com/gogf/gf/util/guuid"
)

var token string

func main() {
	s := g.Server()
	group := s.Group("/api")
	// 默认路径
	// GET带参数
	group.GET("/get", func(r *ghttp.Request) {
		r.Response.Writeln("Hello World!")
		r.Response.Writeln("name:", r.GetString("name"))
	})
	// POST KV
	group.POST("/post/kv", func(r *ghttp.Request) {
		r.Response.Writeln("func:test")
		r.Response.Writeln("name:", r.GetString("name"))
		r.Response.Writeln("age:", r.GetInt("age"))
	})
	// POST JSON
	group.POST("/post/json", func(r *ghttp.Request) {
		r.Response.Writeln("func:test2")
		r.Response.Writeln("name:", r.GetString("name"))
		r.Response.Writeln("age:", r.GetString("age"))

		h := r.Header
		r.Response.Writeln("referer:", h.Get("referer"))
		r.Response.Writeln("COOKIE:", h.Get("COOKIE"))
		r.Response.Writeln(r.COOKIE.Map())
	})

	// 模拟登陆
	system := s.Group("/system")
	// 登陆接口
	system.POST("/login", func(r *ghttp.Request) {
		if "admin" == r.GetString("username") &&
			"123456" == r.GetString("password") {
			token = guuid.New().String()
			r.Response.WriteJson(g.Map{
				"code": 0,
				"data": token,
			})
			r.Exit()
		}
		r.Response.WriteJson(g.Map{
			"code": -1,
			"data": "",
		})
	})
	// 获取用户信息
	system.POST("/user/info", func(r *ghttp.Request) {
		if token != r.Header.Get("token") || token == "" {
			r.Response.WriteJson(g.Map{
				"code": -1,
				"data": "",
			})
			r.Exit()
		}

		// 返回用户信息
		r.Response.WriteJson(g.Map{
			"code": 0,
			"data": "zhangsan",
		})
	})
	// 获取用户年龄
	system.POST("/user/age", func(r *ghttp.Request) {
		if token != r.Header.Get("token") || token == "" {
			r.Response.WriteJson(g.Map{
				"code": -1,
				"data": "",
			})
			r.Exit()
		}

		// 返回用户信息
		r.Response.WriteJson(g.Map{
			"code": 0,
			"data": 11,
		})
	})

	s.SetPort(80)
	s.Run()
}

代码地址

github:https://github.com/goflyfox/tools

gitee:https://gitee.com/goflyfox/tools

教程视频

bilibili教程地址:https://www.bilibili.com/video/BV12V411f7ab/

到此这篇关于IDEA中的HTTP Client使用教程的文章就介绍到这了,更多相关IDEA HTTP Client使用内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!


推荐阅读
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 在package.json中有如下两个对象:husky:{hooks:{pre-commit:lint-staged}},lint-staged:{src** ... [详细]
  • SAP接口编程PyRFC 调用 BAPI_FIXEDASSET_CREATE1创建固定资产
    本篇演示通过PyRFC调用BAPI_FIXEDASSET_CREATE1在SAP系统中创建固定资产,再一次体验一下Python与其它语言相比的简洁性。首先简单说明B ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 本文介绍了JavaScript进化到TypeScript的历史和背景,解释了TypeScript相对于JavaScript的优势和特点。作者分享了自己对TypeScript的观察和认识,并提到了在项目开发中使用TypeScript的好处。最后,作者表示对TypeScript进行尝试和探索的态度。 ... [详细]
  • postman下载安装教程
    Postman是一款强大网页接口调试工具,我们在平时开发过程中经常会使用到,一般使用最多的是postman的客户端,实际上postman在谷歌浏览器上也提供了插件,可以不必要安装客 ... [详细]
author-avatar
绝望的贵族_500
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有