MySQL Java JavaScript PHP Python HTML-CSS C-sharp C++ Go

http.Client

Pentru a efectua cereri HTTP, se poate folosi și structura http.Client. Pentru a trimite o cerere către o resursă web, se poate utiliza una dintre metodele sale:

func (c *Client) Do(req *Request) (*Response, error)
func (c *Client) Get(url string) (resp *Response, err error)
func (c *Client) Head(url string) (resp *Response, err error)
func (c *Client) Post(url string, contentType string, body io.Reader) (resp *Response, err error)
func (c *Client) PostForm(url string, data url.Values) (resp *Response, err error)

Acestea sunt în mare parte echivalente cu funcțiile omonime (cu excepția metodei Do) definite în pachetul net/http și care au fost discutate în tema anterioară. De exemplu, pentru a efectua o cerere GET simplă:

package main
import (
    "fmt"
    "net/http"
    "io"
    "os"
)

func main() { 
   client := http.Client{} 
   resp, err := client.Get("https://google.com") 
   if err != nil { 
         fmt.Println(err) 
         return
   } 
   defer resp.Body.Close() 
   io.Copy(os.Stdout, resp.Body)
}

Configurarea clientului

Structura http.Client are mai multe câmpuri care permit configurarea comportamentului său:

  • Timeout: setează timeout-ul pentru cerere
  • Jar: setează cookie-urile trimise în cerere
  • Transport: definește mecanismul de execuție a cererii

Exemplu de setare a timeout-ului:

package main
import (
    "fmt"
    "net/http"
    "io"
    "os"
    "time"
)

func main() { 
    client := http.Client{
        Timeout: 6 * time.Second,
    } 
    resp, err := client.Get("https://google.com") 
    if err != nil { 
        fmt.Println(err) 
        return
    } 
    defer resp.Body.Close() 
    io.Copy(os.Stdout, resp.Body)
}

Proprietatea Timeout reprezintă un obiect time.Duration, și în acest caz, este setat la 6 secunde.

Request

Pentru a gestiona cererea și parametrii săi în Go se folosește obiectul http.Request. Acesta permite setarea diverselor configurații, adăugarea de cookie-uri, antete și definirea corpului cererii. Pentru a crea un obiect http.Request, se utilizează funcția http.NewRequest():

func NewRequest(method, url string, body io.Reader) (*Request, error)

Funcția primește trei parametri. Primul parametru este tipul cererii sub forma unui șir de caractere ("GET", "POST"). Al doilea parametru este adresa resursei. Al treilea parametru este corpul cererii.

Pentru a trimite obiectul Request, se poate utiliza metoda Do():

Do(req *http.Request) (*http.Response, error)

De exemplu:

package main
import (
    "fmt"
    "net/http"
    "io"
    "os"
)

func main() { 
    client := &http.Client{} 
    req, err := http.NewRequest( 
         "GET", "https://google.com", nil, 
    ) 
    // adăugăm antete
    req.Header.Add("Accept", "text/html")   // adăugăm antetul Accept
    req.Header.Add("User-Agent", "MSIE/15.0")   // adăugăm antetul User-Agent
  
    resp, err := client.Do(req) 
    if err != nil { 
        fmt.Println(err) 
        return
    } 
    defer resp.Body.Close() 
    io.Copy(os.Stdout, resp.Body)
}