好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

IDEA中的HTTP Client使用教程

介绍

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之间的随机整数。

?

1

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文件中指定的变量的值将覆盖环境文件中的值。

?

1

2

3

4

5

6

7

8

9

10

{

  "dev" : {

  "host" : "http://127.0.0.1:80" ,

  "name" : "zhangsan"

  },

  "prod" : {

  "host" : "http://127.0.0.1:80" ,

  "name" : "lisi"

  }

}

调用示例

?

1

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

脚本设置环境变量

?

1

2

3

4

// 设置环境变量

> {%

client.global. set ( "token" , response.body.token);

%}

脚本检测

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

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

# 登陆

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

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

###

# 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

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

###

# 未登录

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

?

1

2

3

4

5

6

7

8

9

10

{

  "dev" : {

  "host" : "http://127.0.0.1:80" ,

  "name" : "zhangsan"

  },

  "prod" : {

  "host" : "http://127.0.0.1:80" ,

  "name" : "lisi"

  }

}

main.go

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

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使用内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

原文链接:https://my.oschina.net/flyoffox/blog/4968437

查看更多关于IDEA中的HTTP Client使用教程的详细内容...

  阅读:24次