Go में HTTP क्लाइंट: A से Z तक सही तरीके से अनुरोध करना

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

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

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

Go में HTTP क्लाइंट: A से Z तक सही तरीके से अनुरोध करना



Go (Golang) एक ऐसी भाषा है जो अपनी सरलता और प्रदर्शन के लिए प्रसिद्ध है, विशेष रूप से नेटवर्क प्रोग्रामिंग के क्षेत्र में। अंतर्निहित पैकेज net/http एक शक्तिशाली और लचीला HTTP-क्लाइंट प्रदान करता है जो सरल अनुरोधों से लेकर जटिल उच्च-लोड सिस्टम तक के लिए उपयुक्त है। इस लेख में, हम जानेंगे कि Go में HTTP-क्लाइंट का सही तरीके से उपयोग कैसे करें, बुनियादी अनुरोधों से लेकर उन्नत सेटिंग्स तक।



1. मूल बातें: सरल अनुरोध बनाना और निष्पादित करना



Go में HTTP अनुरोध करने का सबसे सरल तरीका net/http पैकेज से हेल्पर फ़ंक्शन का उपयोग करना है, जैसे http.Get और http.Post। हालांकि, प्रोडक्शन कोड के लिए क्लाइंट और अनुरोध को स्पष्ट रूप से बनाने की अनुशंसा की जाती है।



बुनियादी GET अनुरोध:



package main

import ( "fmt" "io/ioutil" "net/http")

func main() { // एक नया क्लाइंट बनाएं client := &http.Client{}

// एक अनुरोध बनाएं req, err := http.NewRequest("GET", "https://api.example.com/data", nil) if err != nil { fmt.Println("अनुरोध बनाने में त्रुटि:", err) return }

// अनुरोध निष्पादित करें resp, err := client.Do(req) if err != nil { fmt.Println("अनुरोध निष्पादित करने में त्रुटि:", err) return } defer resp.Body.Close()

// प्रतिक्रिया का बॉडी पढ़ें body, err := ioutil.ReadAll(resp.Body) if err != nil { fmt.Println("प्रतिक्रिया पढ़ने में त्रुटि:", err) return }

fmt.Println("स्थिति:", resp.Status) fmt.Println("बॉडी:", string(body))}


JSON बॉडी के साथ POST अनुरोध:



package main

import ( "bytes" "encoding/json" "fmt" "net/http")

type Payload struct { Name string `json:"name"` Email string `json:"email"`}

func main() { payload := Payload{Name: "John", Email: "john@example.com"} jsonData, _ := json.Marshal(payload)

client := &http.Client{} req, err := http.NewRequest("POST", "https://api.example.com/users", bytes.NewBuffer(jsonData)) if err != nil { fmt.Println("त्रुटि:", err) return }

// हेडर सेट करें req.Header.Set("Content-Type", "application/json") req.Header.Set("Authorization", "Bearer your-token")

resp, err := client.Do(req) if err != nil { fmt.Println("त्रुटि:", err) return } defer resp.Body.Close()

fmt.Println("स्थिति:", resp.Status)}


2. टाइमआउट और कॉन्टेक्स्ट का प्रबंधन



सबसे आम गलतियों में से एक टाइमआउट की कमी है। उनके बिना, आपका क्लाइंट सर्वर से प्रतिक्रिया की प्रतीक्षा में अनिश्चित काल तक फंस सकता है। Go में प्रतीक्षा समय को प्रबंधित करने के दो मुख्य तरीके हैं।



क्लाइंट स्तर पर टाइमआउट:



client := &http.Client{    Timeout: 10 * time.Second, // पूरे अनुरोध के लिए कुल टाइमआउट}


कॉन्टेक्स्ट का उपयोग करके टाइमआउट (अनुशंसित):



ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)defer cancel()

req, err := http.NewRequestWithContext(ctx, "GET", "https://api.example.com/data", nil)if err != nil { log.Fatal(err)}

resp, err := client.Do(req)if err != nil { // जाँचें कि क्या टाइमआउट समाप्त हुआ if errors.Is(err, context.DeadlineExceeded) { fmt.Println("अनुरोध टाइमआउट से अधिक हो गया") } else { fmt.Println("त्रुटि:", err) } return}defer resp.Body.Close()


कॉन्टेक्स्ट का उपयोग अधिक लचीलापन देता है: आप किसी भी समय अनुरोध को रद्द कर सकते हैं (उदाहरण के लिए, एप्लिकेशन बंद करते समय) और कॉन्टेक्स्ट के माध्यम से मान पास कर सकते हैं।



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



नेटवर्क अविश्वसनीय है, इसलिए आपका क्लाइंट अस्थायी विफलताओं के लिए तैयार होना चाहिए।

ब्लॉग

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