HTTP POST, GET आदि के लिए उपयोग करने के लिए सबसे अच्छा जावा पुस्तकालय क्या है? [बन्द है]


96

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

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

जवाबों:


107

imho: अपाचे HTTP क्लाइंट

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

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, HEAD, OPTIONS, और TRACE) का पूर्ण कार्यान्वयन एक व्यापक OO ढांचे में।
    • HTTPS (HTTP ओवर एसएसएल) प्रोटोकॉल के साथ एन्क्रिप्शन का समर्थन करता है।
    • दानेदार गैर-मानक कॉन्फ़िगरेशन और ट्रैकिंग।
    • HTTP प्रॉक्सी के माध्यम से पारदर्शी कनेक्शन।
    • HTTP प्रोक्सीज़ के माध्यम से कनेक्ट किए गए HTTPS कनेक्शन, कनेक्ट विधि के माध्यम से।
    • देशी जावा सॉकेट समर्थन का उपयोग करके SOCKS परदे के पीछे (संस्करण 4 और 5) के माध्यम से पारदर्शी कनेक्शन।
    • बेसिक, डाइजेस्ट और एनक्रिप्टिंग एनटीएलएम (एनटी लैन मैनेजर) विधियों का उपयोग करके प्रमाणीकरण।
    • कस्टम प्रमाणीकरण विधियों के लिए प्लग-इन तंत्र।
    • बड़ी फ़ाइलों को अपलोड करने के लिए मल्टी-पार्ट फॉर्म POST।
    • प्लगेबल सुरक्षित सॉकेट्स कार्यान्वयन, जिससे थर्ड पार्टी सॉल्यूशंस का उपयोग करना आसान हो जाता है
    • बहु-थ्रेडेड अनुप्रयोगों में उपयोग के लिए कनेक्शन प्रबंधन समर्थन। अधिकतम कुल कनेक्शन और साथ ही प्रति होस्ट अधिकतम कनेक्शन स्थापित करने का समर्थन करता है। बासी कनेक्शन का पता लगाता है और बंद करता है।
    • सेट-कुकी पढ़ने के लिए स्वचालित कुकी हैंडलिंग: सर्वर से हेडर और उन्हें कुकी में वापस भेजना: उपयुक्त होने पर हेडर।
    • कस्टम कुकी नीतियों के लिए प्लग-इन तंत्र।
    • सर्वर से सॉकेट पर सीधे स्ट्रीमिंग द्वारा किसी भी सामग्री बॉडी को बफरिंग से बचने के लिए आउटपुट स्ट्रीम का अनुरोध करें।
    • रिस्पांस इनपुट धाराएं सॉकेट से सर्वर पर सीधे स्ट्रीमिंग करके रिस्पॉन्स बॉडी को कुशलता से पढ़ने के लिए स्ट्रीम करती हैं।
    • HTTP / 1.0 में KeepAlive का उपयोग करके लगातार कनेक्शन और HTTP / 1.1 में दृढ़ता
    • प्रतिक्रिया कोड और सर्वर द्वारा भेजे गए हेडर तक सीधी पहुंच।
    • कनेक्शन टाइमआउट सेट करने की क्षमता।
    • HttpMethods समानांतर अनुरोध और कनेक्शन के कुशल पुन: उपयोग के लिए अनुमति देने के लिए कमांड पैटर्न को लागू करता है।
    • स्रोत कोड अपाचे सॉफ्टवेयर लाइसेंस के तहत स्वतंत्र रूप से उपलब्ध है।

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

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

4
ऐसा लगता है कि हर रिलीज़ बहुत बड़े बदलाव हैं ... वर्षों से इस लाइब्रेरी से वास्तव में निराश हो रहे हैं .... और अब वे पूल से कनेक्शन लीक करते दिख रहे हैं, जो कि मेरे पास अधिकतम 20 सेट हैं .... grrrrr ।
डीन हिलर

5
Apache HttpClient अब EOL प्रतीत होता है, जिसमें एक नई Apache लाइब्रेरी उपलब्ध है।
एंड्रयू आइलेट

17
डियर डाउन-वोटर, यह जवाब लगभग 5 साल पहले बनाया गया था ...
क्रिस


16

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

मुझे क्यों पसंद है कुछ कारण:

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

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

जर्सी के साथ कुछ कोड नमूने 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


11

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

रेस्टलेट एक 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);

अधिक जानकारी के लिए http://www.restlet.org/ देखें


6

मैं तुम्हें सलाह दे सकते हैं मकई-httpclient । यह ज्यादातर मामलों के लिए सरल, तेज और पर्याप्त है।

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

मावेन निर्भरता

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


5

मैं निंग Async Http क्लाइंट लाइब्रेरी का उल्लेख करना चाहता हूं । मैंने कभी भी इसका उपयोग नहीं किया है, लेकिन मेरे सहयोगी ने अपाचे एचटीपी क्लाइंट की तुलना में इसके बारे में कहा, जो मैंने हमेशा अतीत में उपयोग किया है। मुझे यह जानने में विशेष रूप से दिलचस्पी थी कि यह नेट्टी , उच्च-प्रदर्शन अतुल्यकालिक i / o ढांचे पर आधारित है , जिसके साथ मैं अधिक परिचित हूं और उच्च सम्मान में रखता हूं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.