C# में HTTP क्लाइंट: अनुरोधों को सही और कुशलता से करें

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें
```html

परिचय: C# में सही HTTP क्लाइंट की आवश्यकता क्यों है?

आधुनिक डेवलपमेंट में, लगभग कोई भी एप्लिकेशन बाहरी सेवाओं के साथ इंटरैक्शन के बिना काम नहीं करता है। चाहे वह सर्वर पर डेटा भेजना हो, मुद्रा दर प्राप्त करना हो या क्लाउड API के साथ काम करना हो — इन सबके लिए HTTP-अनुरोधों के सक्षम कार्यान्वयन की आवश्यकता होती है। C# (.NET) इकोसिस्टम में, इस कार्य के लिए मुख्य उपकरण HttpClient क्लास है। हालांकि, कई डेवलपर्स, विशेष रूप से शुरुआती, सामान्य गलतियाँ करते हैं: वे प्रत्येक अनुरोध के लिए HttpClient का एक नया इंस्टेंस बनाते हैं, एक्सेप्शन को हैंडल करना भूल जाते हैं, या एसिंक्रोनसिटी के साथ गलत तरीके से काम करते हैं।

इस लेख में, हम C# में HTTP-क्लाइंट को सही ढंग से व्यवस्थित करने का तरीका समझेंगे, GET और POST अनुरोध भेजने, हेडर और अनुरोध बॉडी के साथ काम करने, साथ ही एरर हैंडलिंग की सर्वोत्तम प्रथाओं पर विचार करेंगे। पढ़ने के बाद, आप किसी भी REST API के साथ इंटरैक्ट करने के लिए विश्वसनीय और कुशल कोड लिखने में सक्षम होंगे।

C# में HttpClient के साथ काम करने की मूल बातें

HttpClient क्लास System.Net.Http नेमस्पेस में आता है और .NET (Core, 5, 6, 7, 8 और उससे ऊपर) के सभी आधुनिक संस्करणों में उपलब्ध है। इसका मुख्य लाभ एसिंक्रोनस ऑपरेशन के लिए समर्थन और कनेक्शन पूल का स्वचालित प्रबंधन है।

HttpClient का सही निर्माण

सबसे महत्वपूर्ण नियम: प्रत्येक अनुरोध के लिए नया HttpClient न बनाएं। इससे सॉकेट खत्म हो सकते हैं (socket exhaustion)। इसके बजाय, एप्लिकेशन के पूरे जीवनकाल के लिए एक इंस्टेंस का उपयोग करें या IHttpClientFactory लागू करें।

// ❌ खराब: प्रत्येक अनुरोध पर नया HttpClient
using (var client = new HttpClient())
{
    var response = await client.GetAsync("https://api.example.com");
}

// ✅ अच्छा: सभी अनुरोधों के लिए एक HttpClient
public class MyHttpService
{
    private static readonly HttpClient _client = new HttpClient();
    
    public async Task<string> GetDataAsync(string url)
    {
        return await _client.GetStringAsync(url);
    }
}

बुनियादी सेटिंग्स

HttpClient को इनिशियलाइज़ करते समय, आप बेस एड्रेस, टाइमआउट और डिफ़ॉल्ट हेडर सेट कर सकते हैं:

public class ApiClient
{
    private readonly HttpClient _httpClient;
    
    public ApiClient()
    {
        _httpClient = new HttpClient
        {
            BaseAddress = new Uri("https://api.pythonlib.ru/"),
            Timeout = TimeSpan.FromSeconds(10)
        };
        
        // हेडर जो प्रत्येक अनुरोध के साथ भेजे जाएंगे
        _httpClient.DefaultRequestHeaders.Add("Accept", "application/json");
        _httpClient.DefaultRequestHeaders.Add("User-Agent", "MyApp/1.0");
    }
}

GET और POST अनुरोध भेजना

आइए दो सबसे सामान्य प्रकार के HTTP-अनुरोधों पर विचार करें: डेटा प्राप्त करना (GET) और डेटा भेजना (POST)।

GET-अनुरोध: डेटा प्राप्त करना

GET-अनुरोध का उपयोग सर्वर से डेटा पढ़ने के लिए किया जाता है। इसे संसाधन की स्थिति नहीं बदलनी चाहिए और इसमें बॉडी नहीं होती है।

public async Task<string> GetUserAsync(int userId)
{
    try
    {
        var response = await _httpClient.GetAsync($"/api/users/{userId}");
        response.EnsureSuccessStatusCode(); // त्रुटि पर एक्सेप्शन फेंकेगा
        return await response.Content.ReadAsStringAsync();
    }
    catch (HttpRequestException ex)
    {
        Console.WriteLine($"अनुरोध त्रुटि: {ex.Message}");
        throw;
    }
}

सरल मामलों के लिए, आप संक्षिप्त रूप का उपयोग कर सकते हैं:

string json = await _httpClient.GetStringAsync("/api/users/42");

POST-अनुरोध: डेटा भेजना

POST-अनुरोध का उपयोग नए संसाधन बनाने के लिए किया जाता है। डेटा अनुरोध बॉडी में भेजा जाता है, अक्सर JSON प्रारूप में।

public async Task<User> CreateUserAsync(User newUser)
{
    // ऑब्जेक्ट को JSON में सीरियलाइज़ करें
    var json = JsonSerializer.Serialize(newUser);
```                

ब्लॉग

पुस्तक अनुशंसाएँ