2009-08-24 12 views
72

प्रदर्शन, स्थिरता, परिपक्वता इत्यादि के संदर्भ में HTTP पोस्ट, जीईटी आदि के लिए उपयोग करने के लिए सबसे अच्छी जावा लाइब्रेरी क्या है? क्या कोई विशेष पुस्तकालय है जिसका उपयोग दूसरों से अधिक किया जाता है?HTTP पोस्ट, GET आदि के लिए उपयोग करने के लिए सबसे अच्छी जावा लाइब्रेरी क्या है?

मेरी आवश्यकताएं दूरस्थ सर्वर पर HTTPS POST अनुरोध सबमिट कर रही हैं। मैंने java.net का उपयोग किया है। * अतीत में पैकेज के साथ-साथ org.apache.commons.httpclient। * पैकेज। दोनों को नौकरी मिल गई है, लेकिन मुझे आपकी कुछ राय/सिफारिशें चाहिए।

उत्तर

81

imho: Apache HTTP Client

के उपयोग का उदाहरण:

import org.apache.commons.httpclient.*; 
import org.apache.commons.httpclient.methods.*; 
import org.apache.commons.httpclient.params.HttpMethodParams; 

import java.io.*; 

public class HttpClientTutorial { 

    private static String url = "http://www.apache.org/"; 

    public static void main(String[] args) { 
    // Create an instance of HttpClient. 
    HttpClient client = new HttpClient(); 

    // Create a method instance. 
    GetMethod method = new GetMethod(url); 

    // Provide custom retry handler is necessary 
    method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, 
      new DefaultHttpMethodRetryHandler(3, false)); 

    try { 
     // Execute the method. 
     int statusCode = client.executeMethod(method); 

     if (statusCode != HttpStatus.SC_OK) { 
     System.err.println("Method failed: " + method.getStatusLine()); 
     } 

     // Read the response body. 
     byte[] responseBody = method.getResponseBody(); 

     // Deal with the response. 
     // Use caution: ensure correct character encoding and is not binary data 
     System.out.println(new String(responseBody)); 

    } catch (HttpException e) { 
     System.err.println("Fatal protocol violation: " + e.getMessage()); 
     e.printStackTrace(); 
    } catch (IOException e) { 
     System.err.println("Fatal transport error: " + e.getMessage()); 
     e.printStackTrace(); 
    } finally { 
     // Release the connection. 
     method.releaseConnection(); 
    } 
    } 
} 

कुछ प्रकाश डाला विशेषताएं:

  • मानक आधारित, शुद्ध जावा, HTTP संस्करण 1.0 और 1,1
    • के कार्यान्वयन पूर्ण कार्यान्वयन सभी HTTP विधियों (GET, POST, PUT, DELETE, हेड, विकल्प और TRACE) एक्स्टेंसिबल ओओ फ्रेमवर्क में।
    • HTTPS (HTTP पर HTTP) प्रोटोकॉल के साथ एन्क्रिप्शन का समर्थन करता है।
    • ग्रैनुलर गैर मानक मानकों और ट्रैकिंग।
    • HTTP प्रॉक्सी के माध्यम से पारदर्शी कनेक्शन।
    • CONNECT विधि के माध्यम से HTTP प्रॉक्सी के माध्यम से सुरंग HTTPS कनेक्शन।
    • सॉक्स प्रॉक्सी के माध्यम से पारदर्शी कनेक्शन (संस्करण 4 & 5) मूल जावा सॉकेट समर्थन का उपयोग कर।
    • बेसिक, डाइजेस्ट और एन्क्रिप्टिंग एनटीएलएम (एनटी लैन मैनेजर) विधियों का उपयोग करके प्रमाणीकरण।
    • कस्टम प्रमाणीकरण विधियों के लिए प्लग-इन तंत्र।
    • बड़ी फ़ाइलों को अपलोड करने के लिए बहु-भाग फ़ॉर्म पोस्ट।
    • प्लगेबल सुरक्षित सॉकेट कार्यान्वयन, मल्टी-थ्रेडेड अनुप्रयोगों में इस्तेमाल के लिए यह आसान करने के लिए उपयोग तृतीय पक्ष समाधान
    • कनेक्शन प्रबंधन का समर्थन कर रही है। अधिकतम कुल कनेक्शन के साथ-साथ प्रति होस्ट अधिकतम कनेक्शन सेट करने का समर्थन करता है। पुराने कनेक्शन का पता लगाता है और बंद करता है।
    • सेट-कुकी पढ़ने के लिए स्वचालित कुकी हैंडलिंग: सर्वर से शीर्षलेख और कुकी में उन्हें वापस भेजकर कुकी: उचित होने पर शीर्षलेख।
    • कस्टम कुकी नीतियों के लिए प्लग-इन तंत्र।
    • द्वारा किसी भी सामग्री निकाय को सर्वर पर सीधे स्ट्रीम करने के लिए किसी भी सामग्री निकाय को बफर करने से बचने के लिए आउटपुट स्ट्रीम का अनुरोध करें।
    • सॉफ़्टवेयर से सीधे सर्वर पर स्ट्रीमिंग प्रतिक्रिया प्रतिक्रिया शरीर को कुशलतापूर्वक पढ़ने के लिए प्रतिक्रिया दें।
    • HTTP/1.0 में KeepAlive का उपयोग कर लगातार कनेक्शन और HTTP/1 में दृढ़ता ।1
    • सर्वर द्वारा भेजे गए प्रतिक्रिया कोड और शीर्षलेख तक सीधे पहुंच।
    • कनेक्शन टाइमआउट सेट करने की क्षमता।
    • HttpMethods समानांतर अनुरोधों और कनेक्शन के कुशल पुन: उपयोग के लिए अनुमति देने के लिए कमांड पैटर्न लागू करते हैं।
    • स्रोत कोड अपाचे सॉफ्टवेयर लाइसेंस के तहत स्वतंत्र रूप से उपलब्ध है।
+4

+1 शानदार उत्तर: महान उदाहरण। महान अंक आप वास्तव में अपाचे HTTP क्लाइंट बेचते हैं। – therobyouknow

+17

दस्तावेज हालांकि DATE से बाहर है। HttpClient अब एक ठोस वर्ग नहीं है, यह एक इंटरफ़ेस है, इसलिए उपर्युक्त कोड काम नहीं करेगा क्योंकि यह इस HttpClient इंटरफ़ेस को तुरंत चालू करने का प्रयास करता है। इसके बजाय आपको एक क्लास को तुरंत चालू करना होगा जो HttpClient इंटरफ़ेस लागू करता है, उदाहरण के लिए DefaultHttpClient। – therobyouknow

+3

ऐसा लगता है जैसे प्रत्येक रिलीज बहुत अधिक बड़े बदलाव हैं ... पिछले कुछ सालों में इस पुस्तकालय के साथ वास्तव में निराश हो रहा है .... और अब वे उस पूल से कनेक्शन रिसाव कर रहे हैं, जिसमें मेरे पास अधिकतम 20 सेट हैं .... grrrrrr। –

8

मैं मानता हूँ httpclient एक मानक के बारे में कुछ है - लेकिन मुझे लगता है कि आप ऐसा विकल्प की तलाश कर रहे हैं ...

Restlet विशेष रूप से RESTful वेब सेवाओं के साथ interactong के लिए बनाया गया एक http ग्राहक प्रदान करता है।

उदाहरण कोड:

Client client = new Client(Protocol.HTTP); 
    Request r = new Request(); 
    r.setResourceRef("http://127.0.0.1:8182/sample"); 
    r.setMethod(Method.GET); 
    r.getClientInfo().getAcceptedMediaTypes().add(new Preference<MediaType>(MediaType.TEXT_XML)); 
    client.handle(r).getEntity().write(System.out); 

अधिक जानकारी के

18

के लिए http://www.restlet.org/ देखें मैं Apache HttpComponents HttpClient, Commons HttpClient

के एक उत्तराधिकारी मैं भी HtmlUnit पर एक नज़र लेने के लिए सिफारिश करेंगे की सिफारिश करेंगे। एचटीएमएलयूनीट "जावा प्रोग्राम के लिए जीयूआई-कम ब्राउजर" है। http://htmlunit.sourceforge.net/

15

मैं कुछ हद तक आंशिक हूं Jersey। हम अपनी सभी परियोजनाओं में 1.10 का उपयोग करते हैं और इस मुद्दे पर नहीं चले गए हैं, हम इसके साथ हल नहीं कर पाएंगे।

कुछ कारण जिनकी वजह मुझे यह पसंद है:

  • प्रदाता - बनाया साबुन 1.1/1.2 जर्सी में प्रदाताओं और हमारे JAX-WS के लिए भारी धुरी उपयोग करने के लिए आवश्यकता को समाप्त कर दिया है कॉल
  • फ़िल्टर - बनाया डेटाबेस संवेदनशील जानकारी के लॉगिंग को रोकने के दौरान संपूर्ण अनुरोध (अनुरोध/प्रतिक्रिया शीर्षलेख सहित) को लॉग करने के लिए फ़िल्टर लॉगिंग करना।
  • JAXB - सीधे अनुरोध/प्रतिक्रिया से/वस्तुओं से प्रमुखता का समर्थन करता है
  • एपीआई

सच में उपयोग करने के लिए आसान है, httpclient और जर्सी कार्यान्वयन और एपीआई में बहुत समान हैं। जर्सी के लिए एक एक्सटेंशन भी है जो इसे HTTP क्लाइंट का समर्थन करने की अनुमति देता है।

जर्सी 1.x के साथ कुछ कोड नमूने: https://blogs.oracle.com/enterprisetechtips/entry/consuming_restful_web_services_with

http://www.mkyong.com/webservices/jax-rs/restful-java-client-with-jersey-client/

जर्सी क्लाइंट के साथ

httpclient: https://blogs.oracle.com/PavelBucek/entry/jersey_client_apache_http_client

4

मैं तुम्हें corn-httpclient की सिफारिश कर सकते हैं। यह ज्यादातर मामलों के लिए सरल, तेज़ और पर्याप्त है।क्योंकि यह Android और App इंजन पर भी चला सकते हैं

HttpForm form = new HttpForm(new URI("http://localhost:8080/test/formtest.jsp")); 
//Authentication form.setCredentials("user1", "password"); 
form.putFieldValue("input1", "your value"); 
HttpResponse response = form.doPost(); 
assertFalse(response.hasError()); 
assertNotNull(response.getData()); 
assertTrue(response.getData().contains("received " + val)); 

Maven निर्भरता

<dependency> 
    <groupId>net.sf.corn</groupId> 
    <artifactId>corn-httpclient</artifactId> 
    <version>1.0.0</version> 
</dependency> 
1

मैं Ning Async Http Client Library का उल्लेख करना चाहता हूं। मैंने इसका कभी भी उपयोग नहीं किया है, लेकिन मेरे सहयोगी अपाचे एचटीपी क्लाइंट की तुलना में इसके बारे में बताता है, जिसे मैंने हमेशा अतीत में उपयोग किया था। मुझे विशेष रूप से यह जानने में दिलचस्पी थी कि यह Netty पर आधारित है, उच्च प्रदर्शन एसिंक्रोनस आई/ओ फ्रेमवर्क, जिसके साथ मैं अधिक सम्मान में अधिक परिचित हूं और पकड़ता हूं।

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

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