Метод http.Request.ParseForm

Метод http.Request.ParseForm разбирает данные формы из HTTP-запроса. Он заполняет поля Form и PostForm структуры Request. В поле Form сохраняются параметры из URL-строки запроса и тела формы (для методов POST, PUT и PATCH). В поле PostForm сохраняются только параметры из тела формы. Метод возвращает ошибку в случае проблем с разбором данных.

Синтаксис

goerr := req.ParseForm()

Пример

Давайте разберем простой запрос с параметрами из URL-строки и тела формы:

gopackage main

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

func main() {
  // Создаем POST запрос с параметрами в URL и теле
  url := "http://example.com/api?name=John&age=30"
  body := strings.NewReader("city=NewYork&country=USA")
  req, _ := http.NewRequest("POST", url, body)
  req.Header.Set("Content-Type", "application/x-www-form-urlencoded")

  // Разбираем параметры формы
  err := req.ParseForm()
  if err != nil {
    fmt.Println("Error:", err)
    return
  }

  // Выводим все параметры из Form
  fmt.Println("Form:", req.Form)
  // Выводим параметры из PostForm
  fmt.Println("PostForm:", req.PostForm)
}

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

go"Form: map[age:[30] city:[NewYork] country:[USA] name:[John]]"
"PostForm: map[city:[NewYork] country:[USA]]"

Пример

Давайте разберем запрос только с параметрами в URL-строке:

gopackage main

import (
  "fmt"
  "net/http"
)

func main() {
  // Создаем GET запрос с параметрами в URL
  url := "http://example.com/search?query=golang&page=2"
  req, _ := http.NewRequest("GET", url, nil)

  // Разбираем параметры формы
  err := req.ParseForm()
  if err != nil {
    fmt.Println("Error:", err)
    return
  }

  // Выводим все параметры из Form
  fmt.Println("Form:", req.Form)
  // Для GET запроса PostForm будет пустым
  fmt.Println("PostForm:", req.PostForm)
}

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

go"Form: map[page:[2] query:[golang]]"
"PostForm: map[]"

Пример

Давайте разберем запрос только с параметрами в теле формы:

gopackage main

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

func main() {
  // Создаем POST запрос с параметрами только в теле
  url := "http://example.com/api"
  body := strings.NewReader("username=alice&password=123456")
  req, _ := http.NewRequest("POST", url, body)
  req.Header.Set("Content-Type", "application/x-www-form-urlencoded")

  // Разбираем параметры формы
  err := req.ParseForm()
  if err != nil {
    fmt.Println("Error:", err)
    return
  }

  // Выводим все параметры из Form
  fmt.Println("Form:", req.Form)
  // Выводим параметры из PostForm
  fmt.Println("PostForm:", req.PostForm)
}

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

go"Form: map[password:[123456] username:[alice]]"
"PostForm: map[password:[123456] username:[alice]]"

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

  • метод http.Request.ParseMultipartForm,
    который разбирает multipart/form-data запросы
  • метод http.Request.FormValue,
    который возвращает значение параметра формы
  • метод http.Request.PostFormValue,
    который возвращает значение параметра из тела формы
  • функцию url.Values,
    которая представляет параметры формы в виде map