cpp

Структура Client: HTTP-клиент

Структура Client из пакета net/http описывает HTTP-клиент. Объявление структуры:

// import "net/url"
type Client struct {
   Transport RoundTripper
   CheckRedirect func(req *Request, via []*Request) error
   Jar CookieJar
   Timeout time.Duration
}

Экземпляр структуры Client с настройками по умолчанию доступен через переменную DefaultClient:

var http.DefaultClient *http.Client

Структура Client содержит следующие методы:

  • Get() — выполняет запрос методом GET. Формат метода:
(*http.Client).Get(url string) (resp *http.Response, err error)
  • Post() — выполняет запрос методом POST. Формат метода:
(*http.Client).Post(url string, contentType string,
       body io.Reader) (resp *http.Response, err error)
  • PostForm() — выполняет запрос методом POST. Формат метода:
(*http.Client).PostForm(url string,
       data url.Values) (resp *http.Response, err error)
  • Head() — выполняет запрос методом HEAD. Формат метода:
(*http.Client).Head(url string) (resp *http.Response, err error)
  • Do() — выполняет произвольный запрос. Формат метода:
(*http.Client).Do(req *http.Request) (*http.Response, error)
  • CloseIdleConnections() — закрывает соединения. Формат метода:
(*http.Client).CloseIdleConnections()

Давайте изменим содержимое файла C:\xampp\htdocs\index.php следующим образом:

<?php
print_r($_GET);
?>

Теперь выполним запрос методом GET и обработаем результат, если код ответа сервера от 200 до 300 (не включая этот код) (листинг 19.8). Дополнительно установим тайм-аут запроса в 15 секунд. Если тайм-аут истек, то запрос завершится ошибкой.

Листинг 19.8. Отправка запроса методом GET с установкой тайм-аута

package main

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

func main() {
   client := &http.Client{
      Timeout: 15 * time.Second,
   }
   resp, err := client.Get("http://localhost/index.php?x=5")
   if err != nil {
      fmt.Println(err)
      return
   }
   defer resp.Body.Close()
   if resp.StatusCode >= 300 {
      fmt.Println("Статус:", resp.Status)
      return
   }
   fmt.Println("Статус:", resp.Status)
   body, err := io.ReadAll(resp.Body)
   if err != nil {
      fmt.Println(err)
      return
   }
   fmt.Println(string(body))
}

Если тайм-аут истечет, то получим следующее сообщение об ошибке:

Get "http://localhost/index.php?x=5": context deadline exceeded
(Client.Timeout exceeded while awaiting headers)

Чтобы увидеть сообщение об ошибке измените содержимое файла C:\xampp\htdocs\index.php следующим образом:

<?php
sleep(20);
print_r($_GET);
?>

Учебник Go (Golang)
Учебник Go (Golang) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов

cpp