Eu tenho um serviço da web em execução na minha caixa de desenvolvimentoimplementado usando o Spring-MVC 3.0. Eu tenho várias JUnits que testam nesse serviço usando RestTemplate. O que eu gostaria de fazer é que o JMeter atenda as solicitações REST JUnits quando eu as executar. No entanto, para fazer isso, preciso que o RestTemplate do Spring os envie ao proxy em que estou executando o JMeter. Então, a pergunta é: como posso fazer isso?
Fiz algo semelhante com o CXF e seus http: conduit e http: client, mas realmente não tenho idéia de como fazer isso com o Spring-MVC.
Respostas:
50 para resposta № 1A resposta aceita funciona para casos de uso simples,onde você deseja que todas as solicitações usem o mesmo proxy. Se você precisar de algumas solicitações através do restTemplate para usar o proxy, e outras para não, você pode achar isso mais útil. (Ou se você gosta de fazer isso programaticamente mais do que gosta de mexer nas propriedades do sistema!)
@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);
}
Você deve conseguir criar uma cópia do bean restTemplate dessa maneira e outra da maneira normal, para poder enviar solicitações com e sem o proxy.
13 para resposta № 2
Infelizmente, isso foi realmente fácil.
Properties props = System.getProperties();
props.put("http.proxyHost", "localhost");
props.put("http.proxyPort", "9080");
4 para resposta № 3
Primavera tem uma boa documentação usando um Customizer para determinar diferentes 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));
}
}
e a chamada para aplicar o ProxyCustomizer é
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
return builder.additionalCustomizers(new ProxyCustomizer()).build();
}
1 para resposta № 4
coloque essas linhas antes de chamar seu método get ou post. para que o proxy seja definido.
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 para a resposta № 5
Como alternativa, você pode usar parâmetros de tempo de execução:
jre -DproxySet=true -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=8888