AHu*_*ist 41 java rest proxy spring-mvc jmeter
我在使用Spring-MVC 3.0实现的开发盒上运行了一个Web服务.我有各种JUnit使用RestTemplate测试该服务.我想要做的是让JMeter在运行时获取这些JUnits REST请求.但是,要做到这一点,我需要让Spring的RestTemplate将它们发送到我正在运行JMeter的代理.所以,问题是,我该怎么做?
我已经用CXF和他们的http:conduit和http:client做了类似的东西,但我真的不知道怎么用Spring-MVC做这个.
Cor*_*han 74
@ AHungerArtist的答案适用于简单的用例,您希望所有请求都使用相同的代理.但是,如果您需要通过restTemplate使用代理请求某些请求,而其他请求则不需要,您可能会发现这更有用.(或者,如果您只是喜欢以编程方式执行此操作,而不是喜欢使用系统属性!)
@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);
}
Run Code Online (Sandbox Code Playgroud)
您应该能够以这种方式创建restTemplate bean的副本,并且能够以正常方式创建另一个副本,这样您就可以使用和不使用代理发送请求.
AHu*_*ist 17
可悲的是,这真的很容易.
Properties props = System.getProperties();
props.put("http.proxyHost", "localhost");
props.put("http.proxyPort", "9080");
Run Code Online (Sandbox Code Playgroud)
Spring拥有使用Customizer确定不同代理的良好文档
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));
}
}
Run Code Online (Sandbox Code Playgroud)
调用ProxyCustomizer的调用是
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
return builder.additionalCustomizers(new ProxyCustomizer()).build();
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
65935 次 |
最近记录: |