Метод http.Request.ParseForm
Метод http.Request.ParseForm разбирает данные формы из HTTP-запроса. Он заполняет поля Form и PostForm структуры Request. В поле Form сохраняются параметры из URL-строки запроса и тела формы (для методов POST, PUT и PATCH). В поле PostForm сохраняются только параметры из тела формы. Метод возвращает ошибку в случае проблем с разбором данных.
Синтаксис
err := req.ParseForm()
Пример
Давайте разберем простой запрос с параметрами из URL-строки и тела формы:
package 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)
}
Результат выполнения кода:
"Form: map[age:[30] city:[NewYork] country:[USA] name:[John]]"
"PostForm: map[city:[NewYork] country:[USA]]"
Пример
Давайте разберем запрос только с параметрами в URL-строке:
package 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)
}
Результат выполнения кода:
"Form: map[page:[2] query:[golang]]"
"PostForm: map[]"
Пример
Давайте разберем запрос только с параметрами в теле формы:
package 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)
}
Результат выполнения кода:
"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