使用WireMock 伪造 Rest 服务

简介: WireMock 是基于 HTTP 的模拟器。它具备 HTTP 响应存根、请求验证、代理/拦截、记录和回放功能。当开发人员的开发进度不一致时,可以依赖 WireMock 构建的接口,模拟不同请求与响应,从而避某一模块的开发进度。

WireMock 是基于 HTTP 的模拟器。它具备 HTTP 响应存根、请求验证、代理/拦截、记录和回放功能。
当开发人员的开发进度不一致时,可以依赖 WireMock 构建的接口,模拟不同请求与响应,从而避某一模块的开发进度。

官方文档:http://wiremock.org/docs/running-standalone/

1. 搭建wireMock单机服务

1.1 下载jar包

服务jar包下载:http://repo1.maven.org/maven2/com/github/tomakehurst/wiremock-standalone/2.14.0/wiremock-standalone-2.14.0.jar

1.2 启动jar

java -jar wiremock-standalone-2.14.0.jar --port 9000
我在这里用9000端口启动

img_aa6e0701c566af648033942e802899bc.png

好了,看到上面的图案说明服务就搭建好了。

2. 向服务里注册Rest服务

2.1 导入依赖
        <dependency>
            <groupId>com.github.tomakehurst</groupId>
            <artifactId>wiremock</artifactId>
        </dependency>
2.2 写一个简单的模拟Rest
/**
 * Created by Fant.J.
 */
public class MockServer {
    public static void main(String[] args) {
        //通过端口连接服务
        WireMock.configureFor(9000);
        //清空之前的配置
        WireMock.removeAllMappings();

        //get请求
        WireMock.stubFor(WireMock.get(WireMock.urlPathEqualTo("/user/1"))
                .willReturn(WireMock.aResponse()
                 //body里面写 json
                .withBody("{\"username\":FantJ}")
                 //返回状态码
                .withStatus(200)));

    }
}

运行这个main方法。

img_f1cad05b5d94865f795bc7e759d152e5.png

然后访问 http://127.0.0.1:9000/user/1
img_44cb45af406150d2a796e1c12d39e7bb.png

企业级开发封装

/**
 * Created by Fant.J.
 */
public class MockServer {
    public static void main(String[] args) throws IOException {
        //通过端口连接服务
        WireMock.configureFor(9000);
        //清空之前的配置
        WireMock.removeAllMappings();

        //调用 封装方法
        mock("/user/2","user");


    }

    private static void mock(String url, String filename) throws IOException {
        ClassPathResource resource = new ClassPathResource("/wiremock/"+filename+".txt");
        String content = FileUtil.readAsString(resource.getFile());

        //get请求
        WireMock.stubFor(WireMock.get(WireMock.urlPathEqualTo(url))
                .willReturn(WireMock.aResponse()
                        //body里面写 json
                        .withBody(content)
                        //返回状态码
                        .withStatus(200)));
    }
}

其中,user.txt文件在这里


img_d560429bd942f6aec6efd5cb13319c95.png

文本内容:


img_b747c12e35928d40e7a962667ddbe46d.png

然后我们运行程序,访问http://127.0.0.1:9000/user/2

img_cd1f51bffe098f18d75a908aed6a90bd.png

介绍下我的所有文集:

流行框架

SpringCloud
springboot
nginx
redis

底层实现原理:

Java NIO教程
Java reflection 反射详解
Java并发学习笔录
Java Servlet教程
jdbc组件详解
Java NIO教程
Java语言/版本 研究

相关文章
|
4月前
|
安全 网络安全 数据安全/隐私保护
[flask]使用mTLS双向加密认证http通信
[flask]使用mTLS双向加密认证http通信
112 0
|
网络协议 安全 Linux
深入解析HTTP请求:了解请求特征与报文格式的关键秘密
这篇文章将带您深入了解HTTP请求的特征和报文格式。HTTP作为一种简单、灵活且易于扩展的协议,适用于各种操作系统和设备。我们还将探讨持久性连接如何提高请求的效率。了解HTTP报文的构成,包括起始行、头部字段和消息正文,将帮助您更好地理解HTTP的工作原理。无论您是初学者还是已经有一定了解的读者,本文都将为您提供全面的HTTP知识。
360 1
深入解析HTTP请求:了解请求特征与报文格式的关键秘密
|
7月前
|
JSON 安全 网络安全
超详细的用户认证、权限、安全原理详解(认证、权限、JWT、RFC 7235、HTTPS、HSTS、PC端、服务端、移动端、第三方认证等等)
超详细的用户认证、权限、安全原理详解(认证、权限、JWT、RFC 7235、HTTPS、HSTS、PC端、服务端、移动端、第三方认证等等)
1080 0
|
7月前
|
JSON 前端开发 生物认证
REST API 的指纹验证机制
REST API 的指纹验证机制
77 0
|
XML 安全 网络安全
SSRF(服务器端请求伪造)
SSRF(服务器端请求伪造)攻击,如何进行内网穿透
124 1
|
安全 中间件 数据安全/隐私保护
Django中防范CSRF跨站点请求伪造攻击
Django中防范CSRF跨站点请求伪造攻击
111 0
|
数据采集 Python
绕过HTTPS请求中的TLS特征识别及反爬机制
使用 urllib.request 库进行 HTTPS 请求时,可能会出现 TLS 特征被识别的情况,可以考虑以下一些方法来绕过反爬机制:使用代理 IP、修改请求头部信息、降低请求频率或使用其他语言库,如 aiohttp、 Scrapy、Selenium 等,来进行复杂的反爬处理。 这段代码实现了一个基于 asyncio 和 aiohttp 的异步百度百科查询工具,具有较高的并发性能和响应速度,同时通过爬虫代理加强版IP和随机User-Agent能够提高采集的效率。
472 0
绕过HTTPS请求中的TLS特征识别及反爬机制
|
安全 前端开发 JavaScript
Django 安全之跨站点请求伪造(CSRF)保护
Django 安全之跨站点请求伪造(CSRF)保护
145 0
XSRF CRFS(跨站请求伪造,单点登录攻击) 特点和原理
概念:跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。跟跨网站脚本(XSS)相比,XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任。
XSRF CRFS(跨站请求伪造,单点登录攻击) 特点和原理
第十五章 CSP 中的 HTTP 请求 - 处理 CSP 错误
第十五章 CSP 中的 HTTP 请求 - 处理 CSP 错误
140 0