2010-09-10 7 views
22

मेरे पास स्प्रिंग-एमवीसी 3.0 का उपयोग करके लागू मेरे देव बॉक्स पर चल रही एक वेब सेवा है। मेरे पास विभिन्न जुनीट हैं जो RestTemplate का उपयोग कर उस सेवा के खिलाफ परीक्षण करते हैं। मैं क्या करना चाहता हूं कि जब मैं उन्हें चलाता हूं तो जेएमटर उन जुनीट्स आरईएसटी अनुरोधों को उठाता है। हालांकि, ऐसा करने के लिए, मुझे स्प्रिंग के रेस्ट टेम्पलेट को प्रॉक्सी में भेजना होगा कि मैं जेएमटर चला रहा हूं। तो, सवाल यह है कि, मैं यह कैसे कर सकता हूं?RestTemplate का उपयोग करके, प्रॉक्सी को पहले अनुरोध कैसे भेजें ताकि मैं जेएमटर के साथ अपने जूनिट्स का उपयोग कर सकूं?

मैंने सीएक्सएफ और उनके http: conduit और http: क्लाइंट सामान के साथ कुछ ऐसा किया है, लेकिन मुझे वास्तव में यह नहीं पता कि स्प्रिंग-एमवीसी के साथ ऐसा कैसे किया जाए।

उत्तर

40

स्वीकार्य उत्तर सरल उपयोग मामलों के लिए काम करता है, जहां आप सभी अनुरोधों को समान प्रॉक्सी का उपयोग करना चाहते हैं। यदि आपको प्रॉक्सी का उपयोग करने के लिए बाकी टेम्पलेट्स के माध्यम से कुछ अनुरोधों की आवश्यकता है, और दूसरों को नहीं, हालांकि, आपको यह और अधिक उपयोगी मिल सकता है। सामान्य तरीके से (या यदि आप जैसे यह प्रोग्राम के रूप में आप अधिक से अधिक प्रणाली गुणों के साथ mucking की तरह कर रही है!)

@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 सेम की एक प्रति इस तरह बनाने में सक्षम होना चाहिए, और एक और एक है, तो आप प्रॉक्सी के साथ और बिना अनुरोध भेज सकते हैं।

+3

किसी और के लिए यह देखने के लिए बस एक नोट के रूप में, पूर्ण संदर्भ java.net है। प्रॉक्सी क्लास के लिए प्रॉक्सी। – Paul

+0

मैं वास्तव में इस तरह से पसंद करते हैं। उदाहरण के लिए यदि मेरे पास अलग मेजबान का उपयोग करके कई सेवाएं हैं, तो मैं प्रति लक्ष्य होस्ट को कॉन्फ़िगर कर सकता हूं यदि मैं प्रॉक्सी पर जाना चाहता हूं या नहीं। –

+0

क्या यह प्रॉक्सी मल्टीपार्ट सामग्री प्रकार अनुरोधों के साथ अच्छी तरह से पोस्ट करता है? – NiVeR

0

यदि सही ढंग से समझते हैं, तो आप Jmeter रीसेट अनुरोध पर आधारित जेएमटर स्क्रिप्ट को रीसेट करना चाहते हैं, सही?

यदि हां, तो क्या यह जेएमटर को एक कमांड लाइन भेजने के रूप में सरल हो सकता है जो इसे रोकने/शुरू करने के लिए कह रहा है?

11

अफसोस की बात है, यह वास्तव में आसान था।


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

यह महान काम करता है। अब आप चार्ल्स एसएसएल प्रमाण कैसे जोड़ते हैं? – yincrash

+0

आह। यह चार्ल्स के दस्तावेज पर शामिल है। http://www.charlesproxy.com/documentation/using-charles/ssl-certificates/ – yincrash

+1

कृपया याद रखें, इन पद्धतियों का दुष्प्रभाव है, क्योंकि वे कोड प्रॉक्सी का उपयोग करने के लिए आपके जेवीएम सेट कर रहे हैं। यदि आपके पास एक ही एप्लीकेशन है जो एक ही जेवीएम के तहत चलता है, और उस एप्लिकेशन को प्रॉक्सी का उपयोग करने की आवश्यकता नहीं है, तो उसे उसी प्रॉक्सी का उपयोग करने के लिए मजबूर किया जाएगा जिसे आप पहले सेट करते हैं। –

1

अपनी लाइन या पोस्ट विधि को कॉल करने से पहले इन पंक्तियों को डालें। तो प्रॉक्सी सेट हो जाओ।

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

स्प्रिंग एक अच्छा 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)); 

    } 

} 

और कॉल ProxyCustomizer आवेदन करना होगा

@Bean 
public RestTemplate restTemplate(RestTemplateBuilder builder) { 
    return builder.additionalCustomizers(new ProxyCustomizer()).build(); 
} 
संबंधित मुद्दे

 संबंधित मुद्दे