转载

Charles抓取WebClient代理的请求,模拟弱网以及mock数据

Charles 是目前最主流的网络调试工具(Charles、Fiddler、Wireshark...)之一,对于一个开发者来说与网络打交道是日常需求,因此很多时候我们需要调试参数、返回的数据结构、查看网络请求的各种头信息、协议、响应时间等等。所以了解 Charles 并使用它 Charles 通过将自己设置为系统的网络访问代理服务器,这样所有的网络请求都会通过它,从而实现了网路请求的截获和分析。 Chareles 不仅可以分析电脑本机的网络请求(HTTP 和 HTTPS),还可以分析移动端设备的网络请求。

ps:Charles这款软件是收费的,大家可以自行google/bd解决需求。

WebClient

WebClient是从Spring WebFlux5.0版本开始提供的一个非阻塞的基于响应式编程的进行Http请求的客户端工具。它的响应式编程的基于Reactor的。WebClient中提供了标准Http请求方式对应的get、post、put、delete等方法,可以用来发起相应的请求。

开发环境

  • IDEA
  • Springboot
  • Charles

实现步骤

Webclient设置

众所周知,在SpringBoot中使用WebClient去调用第三方接口是很常用的操作,但是有时候为了校验代码的健硕性和准确性,需要用到mock数据以及一些弱网的场景来达到这个目的。

默认情况下,在IDEA里跑的sprintboot项目在用Webclient调第三方接口的时候走的是自己的端口,不会走Charles的端口,这里就先需要设置一下代理。

Webclient设置代理的代码如下:

HttpClient httpClient = HttpClient.create()
                    .tcpConfiguration(tcpClient ->
                            tcpClient.proxy(proxy -> proxy.type(ProxyProvider.Proxy.HTTP).host("127.0.0.1").port(8888)))
                    .secure(t -> t.sslContext(SslContextBuilder.forClient().trustManager(InsecureTrustManagerFactory.INSTANCE)));
            ReactorClientHttpConnector connector = new ReactorClientHttpConnector(httpClient);
            WebClient client = WebClient.builder()
                .clientConnector(connector)
                .baseUrl(googleMapConfig.getBaseUrl())
                .filter(loggingFilter)
                .exchangeStrategies(ExchangeStrategies.builder().codecs(c -> c.defaultCodecs().enableLoggingRequestDetails(true)).build())
                .build();
        return new LoggingWebClient(client, loggingFilter);
复制代码

Charles设置

第一步,给请求打上断点,这样可以在请求过程中修改请求体和返回值。

Charles抓取WebClient代理的请求,模拟弱网以及mock数据
具体的需要可以参看: Charles 功能介绍和使用教程

第二步,设置ssl证书(如果请求是https的需要这一步)

Charles抓取WebClient代理的请求,模拟弱网以及mock数据
具体的需要可以参看: 使用Charles进行HTTPS抓包

基本到这一步,Charles已经可以抓取到webclient发过来的https请求,并且支持打断点修改请求体和返回值。

第三步,设置弱网场景。

Charles抓取WebClient代理的请求,模拟弱网以及mock数据
具体的需要可以参看: 使用Charles进行弱网测试

最后

按照上面几步基本上就可以模拟到一些弱网情况以及修改到一些自己想要的返回值,当然能做到的方式有很多,比如搭建mock服务器,自己写返回值代码,但是无疑文中的这种情况是最快也是最容易操作的。

当初为了模拟也是找了挺多这方面的资料,希望能帮到需要的童鞋!

原文  https://juejin.im/post/5db80a20e51d452a151f97d6
正文到此结束
Loading...