Using RestTemplate, how to send the request to a proxy first so I can use my junits with JMeter?

后端 未结 5 1749
夕颜
夕颜 2020-12-02 22:06

I have a web service running on my dev box implemented using Spring-MVC 3.0. I have various JUnits that test against that service using RestTemplate. What I would like to do

相关标签:
5条回答
  • 2020-12-02 22:42

    put these lines before calling your get or post method. so proxy get set .

        HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
        DefaultHttpClient httpClient = (DefaultHttpClient) requestFactory.getHttpClient();
        HttpHost proxy = new HttpHost("proxtserver", port);
        httpClient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY,proxy);
        restTemplate.setRequestFactory(requestFactory);
    
    0 讨论(0)
  • 2020-12-02 22:47

    Sadly, this was really easy.

    
    Properties props = System.getProperties();
    props.put("http.proxyHost", "localhost");
    props.put("http.proxyPort", "9080");
    
    0 讨论(0)
  • 2020-12-02 22:51

    Spring has a good documentation using a Customizer to determine different proxy

    public class ProxyCustomizer implements RestTemplateCustomizer {
    
        @Override
        public void customize(RestTemplate restTemplate) {
            final String proxyUrl = "proxy.example.com";
            final int port = 3128;
    
            HttpHost proxy = new HttpHost(proxyUrl, port);
            HttpClient httpClient = HttpClientBuilder.create().setRoutePlanner(new DefaultProxyRoutePlanner(proxy) {
                @Override
                protected HttpHost determineProxy(HttpHost target, HttpRequest request, HttpContext context)
                        throws HttpException {
                    if (target.getHostName().equals("gturnquist-quoters.cfapps.io")) {
                        return super.determineProxy(target, request, context);
                    }
                    return null;
                }
            }).build();
            restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory(httpClient));
    
        }
    
    }
    

    and the call to apply the ProxyCustomizer is

    @Bean
    public RestTemplate restTemplate(RestTemplateBuilder builder) {
        return builder.additionalCustomizers(new ProxyCustomizer()).build();
    }
    
    0 讨论(0)
  • 2020-12-02 22:57

    @AHungerArtist's answer works for simple use cases, where you want all requests to use the same proxy. If you need some requests through restTemplate to use the proxy, and others to not, though, you may find this more useful. (Or if you just like doing it programmatically more than you like mucking with system properties!)

    @Bean
    public RestTemplate restTemplate() {
        SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
    
        Proxy proxy = new Proxy(Type.HTTP, new InetSocketAddress("my.host.com", 8080));
        requestFactory.setProxy(proxy);
    
        return new RestTemplate(requestFactory);
    }
    

    You should be able to create a copy of the restTemplate bean that way, and another one the normal way, so you can send requests with and without the proxy.

    0 讨论(0)
  • 2020-12-02 23:06

    Alternatively you can use runtime parameters:

    jre -DproxySet=true -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=8888
    
    0 讨论(0)
提交回复
热议问题