Zoeken…


Syntaxis

  • resp, err: = http.Get (url) // Maakt een HTTP GET-verzoek met de standaard HTTP-client. Er wordt een nulfout geretourneerd als het verzoek mislukt.
  • resp, err: = http.Post (url, bodyType, body) // Maakt een HTTP POST-aanvraag met de standaard HTTP-client. Er wordt een nulfout geretourneerd als het verzoek mislukt.
  • resp, err: = http.PostForm (url, waarden) // Maakt een HTTP-formulier POST-aanvraag met de standaard HTTP-client. Er wordt een nulfout geretourneerd als het verzoek mislukt.

parameters

Parameter Details
resp Een antwoord van het type *http.Response op een HTTP-verzoek
dwalen Een error Als dit niet nul is, vertegenwoordigt dit een fout die is opgetreden toen de functie werd aangeroepen.
url Een URL van het type string waarnaar een HTTP-verzoek wordt gedaan.
lichaamstype Het MIME-type van de string van de body-payload van een POST-aanvraag.
lichaam Een io.Reader (implementeert Read() ) die wordt gelezen tot er een fout wordt gevonden om te worden ingediend als de body-payload van een POST-aanvraag.
waarden Een sleutel / waarde-kaart van het type url.Values . Het onderliggende type is een map[string][]string .

Opmerkingen

Het is belangrijk om defer resp.Body.Close() te defer resp.Body.Close() na elk HTTP-verzoek dat geen niet-nul fout retourneert, anders zullen er middelen worden gelekt.

Basic GET

Voer een eenvoudig GET-verzoek uit en druk de inhoud van een site af (HTML).

package main

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

func main() {
    resp, err := http.Get("https://example.com/")
    if err != nil {
        panic(err)
    }

    // It is important to defer resp.Body.Close(), else resource leaks will occur.
    defer resp.Body.Close()

    data, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        panic(err)
    }

    // Will print site contents (HTML) to output
    fmt.Println(string(data))
}

KRIJG met URL-parameters en een JSON-antwoord

Een aanvraag voor de top 10 van meest recent actieve StackOverflow-berichten met behulp van de Stack Exchange API.

package main

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

const apiURL = "https://api.stackexchange.com/2.2/posts?"

// Structs for JSON decoding
type postItem struct {
    Score int    `json:"score"`
    Link  string `json:"link"`
}

type postsType struct {
    Items []postItem `json:"items"`
}

func main() {
    // Set URL parameters on declaration
    values := url.Values{
        "order": []string{"desc"},
        "sort":  []string{"activity"},
        "site":  []string{"stackoverflow"},
    }

    // URL parameters can also be programmatically set
    values.Set("page", "1")
    values.Set("pagesize", "10")

    resp, err := http.Get(apiURL + values.Encode())
    if err != nil {
        panic(err)
    }

    defer resp.Body.Close()

    // To compare status codes, you should always use the status constants
    // provided by the http package.
    if resp.StatusCode != http.StatusOK {
        panic("Request was not OK: " + resp.Status)
    }

    // Example of JSON decoding on a reader.
    dec := json.NewDecoder(resp.Body)
    var p postsType
    err = dec.Decode(&p)
    if err != nil {
        panic(err)
    }

    fmt.Println("Top 10 most recently active StackOverflow posts:")
    fmt.Println("Score", "Link")
    for _, post := range p.Items {
        fmt.Println(post.Score, post.Link)
    }
}

Time-outverzoek met context

1.7+

Het timen van een HTTP-verzoek met een context kan worden bereikt met alleen de standaardbibliotheek (niet de subreposito's) in 1.7+:

import (
    "context"
    "net/http"
    "time"
)

req, err := http.NewRequest("GET", `https://example.net`, nil)
ctx, _ := context.WithTimeout(context.TODO(), 200 * time.Milliseconds)
resp, err := http.DefaultClient.Do(req.WithContext(ctx))
// Be sure to handle errors.
defer resp.Body.Close()

Voor 1.7

import (
    "net/http"
    "time"

    "golang.org/x/net/context"
    "golang.org/x/net/context/ctxhttp"
)

ctx, err := context.WithTimeout(context.TODO(), 200 * time.Milliseconds)
resp, err := ctxhttp.Get(ctx, http.DefaultClient, "https://www.example.net")
// Be sure to handle errors.
defer resp.Body.Close()

Verder lezen

Voor meer informatie over de context ZIE Context .

PUT-verzoek van JSON-object

Het volgende werkt een gebruikersobject bij via een PUT-verzoek en drukt de statuscode van het verzoek af:

package main

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

type User struct {
    Name  string
    Email string
}

func main() {
    user := User{
        Name:  "John Doe",
        Email: "[email protected]",
    }

    // initialize http client
    client := &http.Client{}

    // marshal User to json
    json, err := json.Marshal(user)
    if err != nil {
        panic(err)
    }

    // set the HTTP method, url, and request body
    req, err := http.NewRequest(http.MethodPut, "http://api.example.com/v1/user", bytes.NewBuffer(json))
    if err != nil {
        panic(err)
    }

    // set the request header Content-Type for json
    req.Header.Set("Content-Type", "application/json; charset=utf-8")
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }

    fmt.Println(resp.StatusCode)
}


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow