web-dev-qa-db-ja.com

RestTemplateを使用して、JMeterで自分のjunitを使用できるように、最初にリクエストをプロキシに送信する方法は?

Spring-MVC 3.0を使用して実装された開発ボックスでWebサービスを実行しています。 RestTemplateを使用してそのサービスに対してテストするさまざまなJUnitがあります。私がやりたいのは、JMeterにJUnitを実行させたときにそれらのJUnits REST=リクエストをピックアップするようにすることです。しかし、それを行うには、SpringのRestTemplateが私がいるプロキシにそれらを送信する必要がありますJMeterを実行しています。質問は、どのようにすればよいですか?

私はCXFとそのhttp:conduitおよびhttp:clientで同様のことを行いましたが、Spring-MVCでこれを行う方法はまったくわかりません。

37
AHungerArtist

@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);
}

RestTemplate Beanのコピーをそのように作成し、別のコピーを通常の方法で作成できるようにする必要があります。これにより、プロキシを使用して、または使用せずにリクエストを送信できます。

70
CorayThan

悲しいことに、これは本当に簡単でした。


Properties props = System.getProperties();
props.put("http.proxyHost", "localhost");
props.put("http.proxyPort", "9080");
16
AHungerArtist

Springには優れた機能があります カスタマイザーを使用して異なるプロキシを決定するドキュメント

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));

    }

}

proxyCustomizerを適用する呼び出しは

@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
    return builder.additionalCustomizers(new ProxyCustomizer()).build();
}
7
Nicolas

または、ランタイムパラメータを使用できます。

jre -DproxySet=true -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=8888
1
itstata

getまたはpostメソッドを呼び出す前にこれらの行を入れてください。プロキシが設定されます。

    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);
1