java - अस्वीकृत जावा HttpClient-यह कितना मुश्किल हो सकता है?




apache-httpclient-4.x apache-commons-httpclient (7)

DefaultHttpClient का उपयोग करने के बजाय HttpClient बनाने के लिए HttpClient का उपयोग करें

उदाहरण के लिए:

MinimalHttpClient httpclient = new HttpClientBuilder().build();

 // Prepare a request object
 HttpGet httpget = new HttpGet("http://www.apache.org/");

मैं बस कुछ JSON डाउनलोड कर रहा हूं और इसे किसी ऑब्जेक्ट में deserialize है। मुझे अभी तक जेएसओएन डाउनलोड करने के लिए अभी तक नहीं मिला है।

लगभग हर एक HttpClient उदाहरण मैं पा सकता हूं, अपाचे साइट पर उन लोगों सहित कुछ दिखता है ...

import org.apache.http.client.HttpClient;
import org.apache.http.impl.client.DefaultHttpClient;

public void blah() {
    HttpClient client = new DefaultHttpClient();
    ...
}

हालांकि, नेटबीन्स मुझे बताता है कि DefaultHttpClient को बहिष्कृत किया गया है। मैंने DefaultHttpClient deprecated करने के लिए googling की कोशिश की है और कई अन्य भिन्नताओं के रूप में मैं सोच सकता हूं और कोई उपयोगी परिणाम नहीं मिल पा रहा हूं, इसलिए मुझे कुछ याद आ रहा है।

वेबपृष्ठ की सामग्री डाउनलोड करने के लिए सही जावा 7 तरीका क्या है? क्या भाषा के हिस्से के रूप में वास्तव में कोई सभ्य एचटीपी ग्राहक नहीं है? मेरे लिए इस पर भरोसा करना मुश्किल है।

इसके लिए मेरा मेवेन निर्भरता है ...

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>LATEST</version>
    <type>jar</type>
</dependency>

आईएमएचओ स्वीकार्य उत्तर सही है लेकिन कुछ 'शिक्षण' को याद करता है क्योंकि यह समझ में नहीं आता है कि उत्तर के साथ कैसे आना है। सभी बहिष्कृत कक्षाओं के लिए JavaDoc (यदि आपके पास यह नहीं है या तो इसे डाउनलोड करें या JavaDoc ), तो यह संकेत देगा कि पुराने कोड को बदलने के लिए किस वर्ग का उपयोग करना है। बेशक यह आपको सब कुछ नहीं बताएगा, लेकिन यह एक शुरुआत है। उदाहरण:

...
 *
 * @deprecated (4.3) use {@link HttpClientBuilder}.  <----- THE HINT IS HERE !
 */
@ThreadSafe
@Deprecated
public class DefaultHttpClient extends AbstractHttpClient {

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

org.apache.http.impl.client.HttpClientBuilder.create().build();

AutoClosable:

जैसा कि जुल्स ने टिप्पणियों में संकेत दिया था, लौटा वर्ग java.io.Closable लागू करता है, इसलिए यदि आप जावा 7 या उससे ऊपर का उपयोग करते हैं तो आप अब कर सकते हैं:

    try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) {...}

इसका फायदा यह है कि आपको अंततः और नल से निपटने की ज़रूरत नहीं है।

अन्य प्रासंगिक जानकारी

कनेक्शन पूलिंग के बारे में भी पढ़ना सुनिश्चित करें और timeouts सेट करें।


प्रासंगिक आयात:

import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import java.io.IOException;

उपयोग:

HttpClient httpClient = HttpClientBuilder.create().build();

संपादित करें (जूल्स के सुझाव के बाद):

चूंकि build() विधि एक CloseableHttpClient देता है जो एक CloseableHttpClient है , आप घोषणा-संसाधन-संसाधन कथन (जावा 7+) में घोषणा कर सकते हैं:

try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) {

    // use httpClient (no need to close it explicitly)

} catch (IOException e) {

    // handle

}

मूल मुद्दे के लिए, मैं आपको तर्क के नीचे आवेदन करने का अनुरोध करता हूं:

 CloseableHttpClient httpClient = HttpClientBuilder.create().build();
 HttpPost httpPostRequest = new HttpPost();

यह वह समाधान है जिसे मैंने समस्या पर लागू किया है कि httpclient एंड्रॉइड 22 के इस संस्करण में बहिष्कृत है

 public static String getContenxtWeb(String urlS) {
    String pagina = "", devuelve = "";
    URL url;
    try {
        url = new URL(urlS);
        HttpURLConnection conexion = (HttpURLConnection) url
                .openConnection();
        conexion.setRequestProperty("User-Agent",
                "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)");
        if (conexion.getResponseCode() == HttpURLConnection.HTTP_OK) {
            BufferedReader reader = new BufferedReader(
                    new InputStreamReader(conexion.getInputStream()));
            String linea = reader.readLine();
            while (linea != null) {
                pagina += linea;
                linea = reader.readLine();
            }
            reader.close();

            devuelve = pagina;
        } else {
            conexion.disconnect();
            return null;
        }
        conexion.disconnect();
        return devuelve;
    } catch (Exception ex) {
        return devuelve;
    }
}

jcabi-http प्रयास करें, जो एक धाराप्रवाह जावा HTTP क्लाइंट है, उदाहरण के लिए:

String html = new JdkRequest("https://www.google.com")
  .header(HttpHeaders.ACCEPT, MediaType.TEXT_HTML)
  .fetch()
  .as(HttpResponse.class)
  .assertStatus(HttpURLConnection.HTTP_OK)
  .body();

इस ब्लॉग पोस्ट को भी देखें: http://www.yegor256.com/2014/04/11/jcabi-http-intro.html


आप निम्नलिखित मेवेन निर्भरता जोड़ सकते हैं।

    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.5.1</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpmime -->
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpmime</artifactId>
        <version>4.5.1</version>
    </dependency>

आप अपने जावा कोड में निम्नलिखित आयात का उपयोग कर सकते हैं।

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGett;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.client.methods.HttpUriRequest;

आप अपने जावा कोड में निम्नलिखित कोड ब्लॉक का उपयोग कर सकते हैं।

HttpClient client = HttpClientBuilder.create().build();
HttpUriRequest httpUriRequest = new HttpGet("http://example.domain/someuri");

HttpResponse response = client.execute(httpUriRequest);
System.out.println("Response:"+response);





apache-commons-httpclient