Функция http.ReadResponse

Функция http.ReadResponse читает HTTP-ответ из переданного сетевого соединения и возвращает структуру http.Response. В первый параметр функция принимает объект net.Conn, из которого будет производиться чтение. Во второй параметр передается указатель на объект http.Request, который используется для проверки совместимости версий HTTP. Функция автоматически обрабатывает заголовки и тело ответа.

Синтаксис

gohttp.ReadResponse(conn net.Conn, req *http.Request) (*http.Response, error)

Пример

Давайте отправим HTTP GET запрос и прочитаем ответ с помощью функции http.ReadResponse:

gopackage main

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

func main() {
  conn, err := net.Dial("tcp", "example.com:80")
  if err != nil {
    fmt.Println("Connection error:", err)
    return
  }
  defer conn.Close()
  
  req, _ := http.NewRequest("GET", "http://example.com", nil)
  req.Write(conn)
  
  res, err := http.ReadResponse(conn, req)
  if err != nil {
    fmt.Println("Read response error:", err)
    return
  }
  defer res.Body.Close()
  
  fmt.Println("Status:", res.Status)
  fmt.Println("Content-Type:", res.Header.Get("Content-Type"))
}

Результат выполнения кода:

go"Status: 200 OK"
"Content-Type: text/html; charset=UTF-8"

Пример

Давайте обработаем ошибку, которая возникает при чтении ответа от сервера с неверным форматом данных:

gopackage main

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

func main() {
  conn, err := net.Dial("tcp", "example.com:80")
  if err != nil {
    fmt.Println("Connection error:", err)
    return
  }
  defer conn.Close()
  
  conn.Write([]byte("INVALID REQUEST\r\n\r\n"))
  
  req, _ := http.NewRequest("GET", "http://example.com", nil)
  res, err := http.ReadResponse(conn, req)
  
  if err != nil {
    fmt.Println("Error reading response:", err)
    return
  }
  defer res.Body.Close()
}

Результат выполнения кода:

go"Error reading response: malformed HTTP response"

Смотрите также

  • функцию http.ReadResponse,
    которая читает HTTP-ответ из соединения
  • функцию http.NewRequest,
    которая создает новый HTTP запрос
  • функцию http.Get,
    которая выполняет HTTP GET запрос
  • функцию http.Client.Do,
    которая выполняет HTTP запрос через клиент