Java Academy · पाठ

java.net.http.HttpClient

Synchronous requests भेजें

पाठ 1, कुल 4 में से13 चरण

java.net.http.HttpClient, CoddyKit पर Java Academy का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Java Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

आधुनिक HTTP क्लाइंट

Java 11 से JDK, java.net.http पैकेज में एक आधुनिक HTTP क्लाइंट उपलब्ध कराता है। यह पुराने HttpURLConnection का स्थान लेते हुए HTTP/1.1 और HTTP/2 का समर्थन करने वाला साफ़-सुथरा, फ्लुएंट API देता है।

तीन मुख्य प्रकार हैं:

  • HttpClient — अनुरोध भेजता है और कॉन्फ़िगरेशन सँभालता है (समय-सीमाएँ, प्रॉक्सी, रीडायरेक्ट)।
  • HttpRequest — क्या भेजना है, उसका अपरिवर्तनीय विवरण।
  • HttpResponse — परिणाम, जिसमें स्थिति, हेडर और बॉडी शामिल हैं।

HttpClient बनाना

आप स्थिर newBuilder() विधि से क्लाइंट बनाते हैं। एक ही क्लाइंट को कई अनुरोधों के लिए दोबारा उपयोग किया जा सकता है और यह थ्रेड-सुरक्षित होता है।

यहाँ हम HTTP/2 और कनेक्शन की समय-सीमा कॉन्फ़िगर करते हैं। तुरंत डिफ़ॉल्ट इंस्टेंस बनाने के लिए newHttpClient() भी उपलब्ध है।

import java.net.http.HttpClient;
import java.time.Duration;

public class Main {
    public static void main(String[] args) {
        HttpClient client = HttpClient.newBuilder()
            .version(HttpClient.Version.HTTP_2)
            .connectTimeout(Duration.ofSeconds(10))
            .build();
        System.out.println("Client version: " + client.version());
    }
}

अनुरोध बनाना

HttpRequest अपरिवर्तनीय है और इसे एक श्रृंखलाबद्ध बिल्डर से बनाया जाता है। न्यूनतम रूप से आपको एक URI देना होता है; डिफ़ॉल्ट रूप से यह GET करता है।

आप URI.create(...) की सहायता से स्ट्रिंग को URI में बदलते हैं।

import java.net.URI;
import java.net.http.HttpRequest;

public class Main {
    public static void main(String[] args) {
        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://example.com/data"))
            .GET()
            .build();
        System.out.println("Method: " + request.method());
        System.out.println("URI: " + request.uri());
    }
}

समकालिक रूप से भेजना

send विधि कॉल करने वाले थ्रेड को प्रतिक्रिया आने तक रोककर रखती है। इसके लिए एक BodyHandler आवश्यक होता है, जो क्लाइंट को बताता है कि प्रतिक्रिया के body को कैसे समझना है।

BodyHandlers.ofString() body को एक String में पढ़ता है।

import java.net.URI;
import java.net.http.*;

public class Main {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://example.com"))
            .build();
        HttpResponse<String> response =
            client.send(request, HttpResponse.BodyHandlers.ofString());
        System.out.println("Status: " + response.statusCode());
    }
}

स्थिति कोड पढ़ना

प्रतिक्रिया statusCode() को int के रूप में उपलब्ध कराती है। 2xx श्रेणी के कोड सफलता दर्शाते हैं, 3xx पुनर्निर्देशन दर्शाते हैं, 4xx क्लाइंट की त्रुटियाँ होती हैं और 5xx सर्वर की त्रुटियाँ होती हैं।

ध्यान दें: एचटीटीपी क्लाइंट 4xx/5xx प्रतिक्रिया पर कभी अपवाद नहीं फेंकता — आपको स्वयं कोड की जाँच करनी होगी।

public class Main {
    public static void main(String[] args) {
        int status = 404;
        String label;
        if (status >= 200 && status < 300) label = "Success";
        else if (status >= 300 && status < 400) label = "Redirect";
        else if (status >= 400 && status < 500) label = "Client error";
        else label = "Server error";
        System.out.println(status + " -> " + label);
    }
}

body पढ़ना

BodyHandlers.ofString() के साथ response.body() एक String लौटाता है। बाइट्स, फ़ाइलों और स्ट्रीम के लिए अन्य हैंडलर भी उपलब्ध हैं, जिनकी चर्चा बाद में की जाएगी।

यह अंश उस body की सामग्री का अनुकरण करता है जो आपको प्राप्त होगी।

public class Main {
    public static void main(String[] args) {
        String body = "{\"message\":\"hello\"}";
        System.out.println("Body length: " + body.length());
        System.out.println("Body: " + body);
    }
}

पुनर्निर्देशन संभालना

डिफ़ॉल्ट रूप से क्लाइंट नहीं पुनर्निर्देशन का अनुसरण करता है। इसे बिल्डर में followRedirects(...) की सहायता से कॉन्फ़िगर करें।

HttpClient.Redirect में उपलब्ध विकल्प NEVER, ALWAYS और NORMAL हैं। NORMAL एचटीटीपीएस से एचटीटीपी में निम्नीकरण को छोड़कर पुनर्निर्देशन का अनुसरण करता है।

import java.net.http.HttpClient;

public class Main {
    public static void main(String[] args) {
        HttpClient client = HttpClient.newBuilder()
            .followRedirects(HttpClient.Redirect.NORMAL)
            .build();
        System.out.println("Redirect policy: " + client.followRedirects());
    }
}

प्रति-अनुरोध timeout

कनेक्शन timeout क्लाइंट पर रहता है। अनुरोध का timeout — यानी प्रतिक्रिया के लिए कितनी देर प्रतीक्षा करनी है — timeout(...) की सहायता से अनुरोध पर निर्धारित किया जाता है।

यदि इसकी अवधि समाप्त हो जाती है, तो send एक HttpTimeoutException फेंकता है।

import java.net.URI;
import java.net.http.HttpRequest;
import java.time.Duration;

public class Main {
    public static void main(String[] args) {
        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://example.com"))
            .timeout(Duration.ofSeconds(5))
            .build();
        System.out.println("Timeout set: " + request.timeout().isPresent());
    }
}

प्रतिक्रिया headers की जाँच करना

प्रतिक्रिया में एक HttpHeaders ऑब्जेक्ट होता है, जिसे headers() के माध्यम से प्राप्त किया जा सकता है। हेडर खोज अक्षर-रूप के प्रति असंवेदनशील होती है और एक से अधिक मान लौटा सकती है, इसलिए firstValue(...) एक Optional<String> लौटाता है।

import java.util.Optional;

public class Main {
    public static void main(String[] args) {
        // Simulating a header lookup result
        Optional<String> contentType = Optional.of("application/json");
        System.out.println("Content-Type: " + contentType.orElse("unknown"));
    }
}

जाँचे गए अपवाद

समकालिक send दो जाँचे गए अपवाद घोषित करता है:

  • आईओएक्ससेप्शन — नेटवर्क या प्रोटोकॉल विफलता।
  • InterruptedException — रोककर रखा गया थ्रेड बाधित हो गया।

आपको दोनों को पकड़ना या घोषित करना आवश्यक है। असमकालिक कॉल, जिनकी चर्चा अगले पाठ में है, फ़्यूचर लौटाकर इस आवश्यकता से बचती हैं।

import java.io.IOException;

public class Main {
    public static void main(String[] args) {
        try {
            // client.send(...) would go here
            throw new IOException("connection refused");
        } catch (IOException e) {
            System.out.println("Network problem: " + e.getMessage());
        }
    }
}

पुनः उपयोग करने योग्य क्लाइंट

सर्वोत्तम अभ्यास: एक एक HttpClient बनाएँ और पूरे अनुप्रयोग में उसका पुनः उपयोग करें। यह कनेक्शनों का पूल बनाता है और पूरी तरह थ्रेड-सुरक्षित है।

हर अनुरोध के लिए नया क्लाइंट बनाना संसाधनों की बर्बादी करता है और एचटीटीपी/2 मल्टीप्लेक्सिंग का लाभ समाप्त कर देता है।

import java.net.http.HttpClient;

public class Main {
    private static final HttpClient SHARED = HttpClient.newHttpClient();

    public static void main(String[] args) {
        System.out.println("Shared client ready: " + (SHARED != null));
    }
}

त्वरित जाँच

समकालिक एचटीटीपी क्लाइंट की अपनी समझ का परीक्षण करें।

पुनरावलोकन

आपने JDK एचटीटीपी क्लाइंट की मूल बातें सीखीं:

  • HttpClient.newBuilder() संस्करण, timeout और पुनर्निर्देशन कॉन्फ़िगर करता है; एक ही इंस्टेंस का पुनः उपयोग करें।
  • HttpRequest.newBuilder().uri(...).GET() एक अपरिवर्तनीय अनुरोध बनाता है।
  • client.send(request, BodyHandlers.ofString()) रुककर चलता है और एक HttpResponse<String> लौटाता है।
  • statusCode(), body() और headers() की सहायता से परिणाम पढ़ें।
  • गैर-2xx कोड अपवाद नहीं फेंकते — उनकी स्वयं जाँच करें।
शुरुआत निःशुल्क

एआई शिक्षक के साथ Java सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
104
पाठ
374

अक्सर पूछे जाने वाले प्रश्न

क्या “java.net.http.HttpClient” पाठ निःशुल्क है?

हाँ—“java.net.http.HttpClient” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Java Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“java.net.http.HttpClient” में मैं क्या सीखूँगा?

Synchronous requests भेजें आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Java Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Java Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Java Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।

“java.net.http.HttpClient” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Java Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Java Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. java.net.http.HttpClient
  2. Asynchronous Requests
  3. Request Bodies और Headers
  4. Responses संभालना
← Java Academy पर वापस जाएँ