name: Модуль Httplib

sort: 4

Запросы с клиента

Также как и Curl, httplib используется для эмуляции http запросов с клиента. Также как и jQuery, он поддердивает цепочки вызовов (fluent interface). Он прост в использовании. Может быть установен следующей командой:

  1. go get github.com/astaxie/beego/httplib

Базовое использование

Импортируйте пакет:

  1. import (
  2. "github.com/astaxie/beego/httplib"
  3. )

Инициализируйте request метод и путь:

  1. req := httplib.Get("http://beego.vip/")

Отправьте запрос и извлеките данные из запроса:

  1. str, err := res.String()
  2. if err != nil {
  3. t.Fatal(err)
  4. }
  5. fmt.Println(str)

Методы

httplib поддерживает следующие методы:

  • Get(url string)
  • Post(url string)
  • Put(url string)
  • Delete(url string)
  • Head(url string)

Отладочный вывод

Включите вывод отладочной информации:

  1. req.Debug(true)

Затем это должно вывести отладочную информацию:

  1. httplib.Get("http://beego.vip/").Debug(true).Response()
  2. // Output
  3. GET / HTTP/0.0
  4. Host: beego.vip
  5. User-Agent: beegoServer

HTTPS запрос

Если запрашиваема схема https, мы должны установить TLS клиент:

  1. req.SetTLSClientConfig(&tls.Config{InsecureSkipVerify: true})

Узнайте больше о настройках TLS

Установка таймаутов

Можем установить таймауты и считывания данных по таймауту:

  1. req.SetTimeout(connectTimeout, readWriteTimeout)

Это функция работает с объектом запроса, а значит мы можем сделать так:

  1. httplib.Get("http://beego.vip/").SetTimeout(100 * time.Second, 30 * time.Second).Response()

Установить параметры запроса

Для PUT или POST запросов, мы можем отправить параметры. Параметры могут быть установлены так:

  1. req := httplib.Post("http://beego.vip/")
  2. req.Param("username","astaxie")
  3. req.Param("password","123456")

Отправка больших данных

Чтобы симулировать загрузку файлов или отправить большые данные вы можете использовать Body функцию:

  1. req := httplib.Post("http://beego.vip/")
  2. bt,err:=ioutil.ReadFile("hello.txt")
  3. if err!=nil{
  4. log.Fatal("read file err:",err)
  5. }
  6. req.Body(bt)

Установить заголовоки

Вы можете эмулировать HEADER заголовки, например:

  1. Accept-Encoding:gzip,deflate,sdch
  2. Host:beego.vip
  3. User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36

Можете использовать Header функцию:

  1. req := httplib.Post("http://beego.vip/")
  2. req.Header("Accept-Encoding","gzip,deflate,sdch")
  3. req.Header("Host","beego.vip")
  4. req.Header("User-Agent","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36")

Загрузка файла

У PostFile функции первый параметр является имя формы, второй параметр имя файла или путь до файла который вы собираетесь отправить.

  1. b:=httplib.Post("http://beego.vip/")
  2. b.Param("username","astaxie")
  3. b.Param("password","123456")
  4. b.PostFile("uploadfile1", "httplib.pdf")
  5. b.PostFile("uploadfile2", "httplib.txt")
  6. str, err := b.String()
  7. if err != nil {
  8. t.Fatal(err)
  9. }

Получение ответа

Как мы можем получить ответ после запроса? Ниже варианты:

Метод Тип Описание
req.Response() (*http.Response, error) Объектhttp.Response. Из него вы сможете получить данные.
req.Bytes() ([]byte, error) Возвращает необработанное тело ответа.
req.String() (string, error) Возвращает необработанное тело ответа.
req.ToFile(filename string) error Сохраняем тело ответа в файл.
req.ToJSON(result interface{}) error Разбираем JSON ответ в результирующий объект.
req.ToXml(result interface{}) error Разбираем XML ответ в результирующий объект.