Go:
Att skicka en HTTP-begäran
Hur:
I Go innebär att skicka en HTTP-begäran och hantera svaret att använda paketet net/http
. Här är ett steg-för-steg-exempel på hur man skickar en enkel GET-begäran och läser svaret:
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
// Definiera URL:en till resursen
url := "http://example.com"
// Använd http.Get för att skicka GET-begäran
resp, err := http.Get(url)
if err != nil {
log.Fatal(err)
}
// Stäng svarets kropp när funktionen avslutas
defer resp.Body.Close()
// Läs svarets kropp
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
// Konvertera svarets kropp till en sträng och skriv ut den
fmt.Println(string(body))
}
Exempelutdata (förkortad för enkelhetens skull):
<!doctype html>
<html>
<head>
<title>Example Domain</title>
...
</html>
För att skicka en POST-begäran med formulärdata kan du använda http.PostForm
:
package main
import (
"fmt"
"io/ioutil"
"net/http"
"net/url"
)
func main() {
// Definiera URL:en och formulärdatan
url := "http://example.com/form"
data := url.Values{}
data.Set("key", "value")
// Skicka POST-begäran med formulärdata
resp, err := http.PostForm(url, data)
if err != nil {
panic(err)
}
defer resp.Body.Close()
// Läs och skriv ut svaret
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
panic(err)
}
fmt.Println(string(body))
}
Fördjupning
Paketet net/http
i Go erbjuder ett kraftfullt och flexibelt sätt att interagera med HTTP-servrar. Dess design speglar Gos betoning på enkelhet, effektivitet och robusthet. Ursprungligen krävde funktioner som hantering av JSON- eller XML-nyttolaster att man manuellt skapade begärankroppen och ställde in lämpliga rubriker. När Go har utvecklats har gemenskapen utvecklat högre nivåpaketer som ytterligare förenklar dessa uppgifter, såsom gorilla/mux
för routing och gjson
för JSON-manipulation.
En anmärkningsvärd aspekt av Gos HTTP-klient är dess användning av gränssnitt och strukturer, som http.Client
och http.Request
, vilka tillåter omfattande anpassning och testning. Till exempel kan du modifiera http.Client
för att tidsgränsa begäranden eller hålla förbindelser vid liv för prestanda.
Ett övervägt alternativ för enklare HTTP-interaktioner är att använda tredjepartsbibliotek som “Resty” eller “Gentleman.” Dessa paket erbjuder en mer hög nivå-abstraktion för HTTP-begäranden, vilket gör gemensamma uppgifter mer koncisa. Att dock förstå och använda det underliggande paketet net/http
är avgörande för att hantera mer komplexa eller unika HTTP-interaktionsscenarier, vilket ger en grund som Gos samtidighetsfunktioner och kraftfulla standardbibliotek kan utnyttjas fullt ut.