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

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

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

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

C# में HTTP क्लाइंट: अनुरोधों को सही ढंग से करना — उन्नत स्तर

\n\n

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

\n\n

1. HttpClient और कनेक्शन पूल के साथ सही काम

\n\n

सबसे आम गलतियों में से एक प्रत्येक अनुरोध के लिए HttpClient का एक नया इंस्टेंस बनाना है। इससे सॉकेट समाप्ति (socket exhaustion) होती है क्योंकि प्रत्येक इंस्टेंस TIME_WAIT स्थिति में एक खुला TCP कनेक्शन रखता है।

\n\n

गलत:

\n
public async Task<string> GetDataAsync(string url)\n{\n    using (var client = new HttpClient())\n    {\n        return await client.GetStringAsync(url);\n    }\n}
\n\n

सही: एक स्थिर या सिंगलटन HttpClient इंस्टेंस का उपयोग करें।

\n\n
public class HttpService\n{\n    private static readonly HttpClient _client = new HttpClient();\n\n    public async Task<string> GetDataAsync(string url)\n    {\n        return await _client.GetStringAsync(url);\n    }\n}
\n\n

अधिक सूक्ष्म नियंत्रण के लिए, Microsoft.Extensions.Http पैकेज से IHttpClientFactory का उपयोग करें। फैक्ट्री पूल का प्रबंधन करती है और DNS विफलताओं पर स्वचालित रूप से कनेक्शन पुनर्स्थापित करती है।

\n\n
// Startup.cs या Program.cs में\nservices.AddHttpClient("MyClient", client =>\n{\n    client.BaseAddress = new Uri("https://api.example.com");\n    client.DefaultRequestHeaders.Add("User-Agent", "MyApp/1.0");\n});\n\n// सेवा में\npublic class MyService\n{\n    private readonly IHttpClientFactory _httpClientFactory;\n\n    public MyService(IHttpClientFactory httpClientFactory)\n    {\n        _httpClientFactory = httpClientFactory;\n    }\n\n    public async Task<string> GetDataAsync()\n    {\n        var client = _httpClientFactory.CreateClient("MyClient");\n        return await client.GetStringAsync("/data");\n    }\n}
\n\n

2. टाइमआउट और अनुरोध रद्द करना

\n\n

टाइमआउट के बिना, आपका क्लाइंट अनिश्चित काल के लिए अटक सकता है। HttpClient में दो तंत्र हैं:

\n\n
    \n
  • Timeout — पूरे अनुरोध के लिए सामान्य टाइमआउट।
  • \n
  • CancellationToken — बाहर से अनुरोध रद्द करने के लिए (उदाहरण के लिए, उपयोगकर्ता ने एप्लिकेशन बंद कर दिया)।
  • \n
\n\n

Timeout को उचित रूप से सेट करें। अधिकांश API के लिए 10–30 सेकंड उपयुक्त रहेगा।

\n\n
var client = new HttpClient\n{\n    Timeout = TimeSpan.FromSeconds(15)\n};\n\n// CancellationTokenSource के साथ उदाहरण\nusing var cts = new CancellationTokenSource(TimeSpan.FromSeconds(10));\ntry\n{\n    var response = await client.GetAsync("https://slow-api.example.com", cts.Token);\n}\ncatch (TaskCanceledException)\n{\n    Console.WriteLine("अनुरोध टाइमआउट के कारण रद्द कर दिया गया।");\n}
\n\n

महत्वपूर्ण: Timeout और CancellationToken एक साथ काम करते हैं। यदि CancellationToken पहले सक्रिय होता है, तो अनुरोध तेजी से रद्द हो जाता है।

\n\n

3. त्रुटि प्रबंधन और पुनः प्रयास नीति (Retry)

\n\n

नेटवर्क विफलताएँ और सर्वर की अस्थायी त्रुटियाँ सामान्य हैं। तुरंत विफल होने के बजाय, एक्सपोनेंशियल बैकऑफ़ के साथ पुनः प्रयास नीति लागू करें। इसके लिए Polly लाइब्रेरी बहुत उपयुक्त है।

\n\n
using Polly;\nusing Polly.Extensions.Http;\n\n// पुनः प्रयास नीति परिभाषित करें\nvar retryPolicy = HttpPolicyExtensions\n    .HandleTransientHttpError() // 5xx, 408\n    .Or<HttpRequestException>()\n    .WaitAndRetryAsync(3, retryAttempt =>\n        Tim                

ब्लॉग

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