Функция http.PostForm

Функция http.PostForm выполняет HTTP запрос с методом POST, отправляя данные формы на указанный URL. Первым параметром функция принимает строку с адресом сервера, вторым параметром - структуру url.Values, содержащую пары ключ-значение для отправки. Функция возвращает указатель на http.Response и ошибку. В случае успеха ответ необходимо закрыть методом defer resp.Body.Close().

Синтаксис

gohttp.PostForm(url string, data url.Values) (*http.Response, error)

Пример

Давайте отправим простую форму с данными пользователя:

gopackage main

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

func main() {
  data := url.Values{}
  data.Set("username", "john_doe")
  data.Set("email", "john@example.com")

  resp, err := http.PostForm("https://httpbin.org/post", data)
  if err != nil {
    fmt.Println("Error:", err)
    return
  }
  defer resp.Body.Close()

  fmt.Println("Status:", resp.Status)
}

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

go"Status: 200 OK"

Пример

Отправим несколько полей формы с различными типами данных:

gopackage main

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

func main() {
  data := url.Values{
    "name":   {"Alice"},
    "age":  {"30"},
    "city":   {"New York"},
    "hobby":  {"reading", "swimming"},
  }

  resp, err := http.PostForm("https://httpbin.org/post", data)
  if err != nil {
    fmt.Println("Error:", err)
    return
  }
  defer resp.Body.Close()

  fmt.Println("Status code:", resp.StatusCode)
}

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

go"Status code: 200"

Пример

Обработаем ответ сервера и прочитаем его содержимое:

gopackage main

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

func main() {
  data := url.Values{}
  data.Set("search", "golang")
  data.Set("limit", "10")

  resp, err := http.PostForm("https://httpbin.org/post", data)
  if err != nil {
    fmt.Println("Error:", err)
    return
  }
  defer resp.Body.Close()

  body, err := io.ReadAll(resp.Body)
  if err != nil {
    fmt.Println("Error reading body:", err)
    return
  }

  fmt.Println("Response body:", string(body))
}

Результат выполнения кода будет содержать JSON ответ от сервера с данными формы:

go"Response body: {\"form\": {\"limit\": \"10\", \"search\": \"golang\"}, ...}"

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

  • функцию http.Get,
    которая выполняет GET запрос к серверу
  • функцию http.Post,
    которая отправляет данные в произвольном формате
  • метод Client.PostForm,
    который отправляет форму через кастомный клиент
  • структуру url.Values,
    которая используется для хранения параметров формы