SpringBoot项目中对RestTemplate进行网络代理Proxy设置使得Fiddler能够进行抓包

Fiddler是非常好用的工具,能够非常方便的分析Http请求。最近SpringBoot项目需要使用RestTemplate调用远程的一个Rest API. 使用Postman测试调用那个API的时候一切正常,使用Java代码RestTemplate调用的时候就有问题。这时候就想到了使用Fiddler抓包,看一看这两次的http请求的具体内容有什么区别。这时候发现,Fiddler竟然不能抓到Java代码的Http请求。大致原因是JVM跳过了系统的代理设置(当启动Fiddler后,一般浏览器能够自动检测到本机网络Proxy的变化并且把所有流量都导向指定的代理。但是JVM无法感知到,所以需要代码中明确指定),这就需要我们自己写代码来个RestTemplate
设置代理。

解决这个问题的方法很多,大部分是在RestTemplate实例生成的时候,设置它的HttpClientFactory中的代理。这种方法是比较典型的Spring注入实例的定制。

    @Bean
    public SimpleClientHttpRequestFactory httpClientFactory() {
        SimpleClientHttpRequestFactory httpRequestFactory = new SimpleClientHttpRequestFactory();
        httpRequestFactory.setReadTimeout(readTimeout);
        httpRequestFactory.setConnectTimeout(connectionTimeout);

        if(proxyConfig.getEnabled()){
            SocketAddress address = new InetSocketAddress(proxyConfig.getHost(), proxyConfig.getPort());
            Proxy proxy = new Proxy(Proxy.Type.HTTP, address);
            httpRequestFactory.setProxy(proxy);
        }

        return httpRequestFactory;
    }

    @Bean
    public RestTemplate restTemplate(SimpleClientHttpRequestFactory httpClientFactory) {
        RestTemplate restTemplate = new RestTemplate(httpClientFactory);
        return restTemplate;
    }

但是在我们的项目中这个办法是不行的,因为我们项目中引用了第三方的类库,SpringBoot在启动的时候,是第三方的类库完成了向容器中注入RestTemplate的动作,我们能做的就是去拿到这个RestTemplate实例进行使用,而不能订制。这时候,我们也可以对RestTemplate实例进行设置Proxy.

SimpleClientHttpRequestFactory reqfac = new SimpleClientHttpRequestFactory();
reqfac.setProxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 62990)));
this.restTemplate.setRequestFactory(reqfac);

这样设置后,Java中RestTempalte发出的http请求,会先到达Fiddler代理处,然后再发送到目的地。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值