So setzen Sie Header in einer HTTP-GET-Anfrage in Go ein: Vollständiger Leitfaden

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Wie setze ich Header in einer HTTP-GET-Anfrage in Go? Vollständige Erklärung mit Code

\n\n

Haben Sie jemals versucht, eine HTTP-GET-Anfrage an einen Server zu senden, und er gab einen Autorisierungsfehler zurück? Oder vielleicht ignorierte die API Ihre Anfrage, obwohl Sie genau wussten, dass sie funktionieren sollte? In 90 % der Fälle liegt das Problem in den HTTP-Headern. Sie sind wie eine Eintrittskarte für eine Party: Ohne das richtige Dokument werden Sie einfach nicht hereingelassen.

\n\n

In diesem Artikel werden wir untersuchen, wie Sie in Go (Golang) professionell mit Headern in HTTP-GET-Anfragen umgehen. Sie lernen nicht nur die grundlegende Syntax, sondern auch typische Fallstricke, in die selbst erfahrene Entwickler tappen. Los geht's!

\n\n

Warum sind Header wichtig?

\n\n

Stellen Sie sich eine HTTP-Anfrage wie einen Umschlag mit einem Brief vor. Der Umschlag selbst (der Anfragetext) kann leer sein, aber die Informationen darauf (die Header) entscheiden über alles:

\n
    \n
  • Content-Type — das Datenformat (JSON, XML, Form)
  • \n
  • Authorization — der Zugriffsschlüssel für die API (Bearer Token, Basic Auth)
  • \n
  • User-Agent — die Identifikation des Clients (damit Sie nicht als Bot blockiert werden)
  • \n
  • Accept — welches Antwortformat Sie erwarten
  • \n
\n

Ohne die richtigen Header versteht der Server einfach nicht, was Sie von ihm wollen.

\n\n

Methode 1: Der gute alte http.Get (und warum er ungeeignet ist)

\n\n

Viele Anfänger in Go beginnen mit http.Get(). Das ist praktisch für Tests, aber diese Methode hat einen großen Nachteil – Sie können keine Header setzen.

\n\n
package main\n\nimport (\n    "fmt"\n    "io/ioutil"\n    "net/http"\n)\n\nfunc main() {\n    // So können Sie keine Header hinzufügen!\n    resp, err := http.Get("https://api.example.com/data")\n    if err != nil {\n        panic(err)\n    }\n    defer resp.Body.Close()\n\n    body, _ := ioutil.ReadAll(resp.Body)\n    fmt.Println(string(body))\n}\n
\n\n

Dieser Code sendet einfach eine „nackte" Anfrage. Wenn die API einen Autorisierungstoken erfordert, erhalten Sie 401 Unauthorized. Für reale Projekte ist dieser Ansatz ungeeignet.

\n\n

Methode 2: Eigene Request erstellen (der richtige Weg)

\n\n

In Go wird für die Feineinstellung von Anfragen der Konstruktor http.NewRequest() verwendet. Er gibt ein Objekt *http.Request zurück, mit dem Sie alles machen können, einschließlich dem Setzen von Headern.

\n\n

Hier ist die grundlegende Struktur:

\n\n
package main\n\nimport (\n    "fmt"\n    "io/ioutil"\n    "net/http"\n)\n\nfunc main() {\n    // 1. URL erstellen\n    url := "https://api.github.com/users/golang"\n\n    // 2. Neue GET-Anfrage erstellen\n    req, err := http.NewRequest("GET", url, nil)\n    if err != nil {\n        panic(err)\n    }\n\n    // 3. Header setzen\n    req.Header.Set("User-Agent", "MyGoApp/1.0")\n    req.Header.Set("Accept", "application/json")\n\n    // 4. Anfrage über HTTP-Client senden\n    client := &http.Client{}\n    resp, err := client.Do(req)\n    if err != nil {\n        panic(err)\n    }\n    defer resp.Body.Close()\n\n    body, _ := ioutil.ReadAll(resp.Body)\n    fmt.Println(string(body))\n}\n
\n\n

Beachten Sie: Wir verwenden req.Header.Set(), nicht req.Header.Add(). Der Unterschied ist wichtig:

\n
    \n
  • Set — ersetzt den vorhandenen Wert (falls dieser Header bereits existiert)
  • \n
  • Add — fügt einen weiteren Wert zum vorhandenen hinzu (erstellt ein Duplikat)
  • \n
\n

Für die meisten Fälle verwenden Sie Set – das ist sicherer.

\n\n

Methode 3: Arbeiten mit Autorisierung (Bearer Token)

\n\n

Das häufigste Szenario ist die Übergabe eines JWT-Tokens. So machen Sie es richtig:

\n\n
package main\n\nimport (\n    "fmt"\n    "net/http"\n)\n\nfunc main() {\n    token := "your_jwt_token_here"\n    url := "https://api.example.com/protected"\n\n    req, _ := http.NewRequest("GET", url, nil)\n\n    // Authorization-Header setzen\n    req.Heade                

Blogs

Buchempfehlungen