В http-пакете Go, как мне получить строку запроса на запрос POST?
Я использую http
пакет от перехода к работе с запросом POST. Как я могу получить доступ и проанализировать содержимое строки запроса из
5 ответов:
строка запроса,по определению, в URL. Вы можете получить доступ к URL запроса с помощью
req.URL
(doc). URL-адрес объекта имеетQuery()
метод (doc), которая возвращаетValues
тип, который является простоmap[string][]string
параметры строки запроса.если то, что вы ищете, это данные POST как представлено в HTML-форме, то это (обычно) пара ключ-значение в теле запроса. Вы правы в своем ответьте, что вы можете позвонить
ParseForm()
и затем использоватьreq.Form
поле для получения карты пар ключ-значение, но вы также можете позвонитьFormValue(key)
чтобы получить значение определенного ключа. Это вызываетParseForm()
если требуется, и получает значения независимо от того, как они были отправлены (т. е. в строке запроса или в теле запроса).
вот более конкретный пример того, как получить доступ к параметрам GET. Элемент
Request
объект имеет метод, который анализирует их для вас называется запрос:предполагая, что URL-адрес запроса, как http://host:port/something?параметр1=б
func newHandler(w http.ResponseWriter, r *http.Request) { fmt.Println("GET params were:", r.URL.Query()) // if only one expected param1 := r.URL.Query().Get("param1") if param1 != "" { // ... process it, will be the first (only) if multiple were given // note: if they pass in like ?param1=¶m2= param1 will also be "" :| } // if multiples possible, or to process empty values like param1 in // ?param1=¶m2=something param1s := r.URL.Query()["param1"] if param1s != nil { // ... process them ... or you could just iterate over them without a nil check // [if none were present, will be a nil array, which golang treats as an empty array] // this way you can also tell if they passed in the parameter as the empty string // it will be an element of the array that is the empty string } }
также обратите внимание: "ключи в карте значений [т. е. возвращаемое значение Query ()] чувствительны к регистру."
пример:
value := FormValue("field")
для получения дополнительной информации. о пакете http, вы можете посетить его документацию здесь.
FormValue
в основном возвращает POST или PUT значения, или получить значения, в этом порядке, Первый, который он находит.
вот простой пример:
package main import ( "io" "net/http" ) func queryParamDisplayHandler(res http.ResponseWriter, req *http.Request) { io.WriteString(res, "name: "+req.FormValue("name")) io.WriteString(res, "\nphone: "+req.FormValue("phone")) } func main() { http.HandleFunc("/example", func(res http.ResponseWriter, req *http.Request) { queryParamDisplayHandler(res, req) }) println("Enter this in your browser: http://localhost:8080/example?name=jenny&phone=867-5309") http.ListenAndServe(":8080", nil) }
Ниже приводятся слова из официального документа.
форма содержит проанализированные данные формы, включая оба параметры запроса поля URL и разместить или поместить данные формы. Это поле доступно только после вызова ParseForm.
Итак, примеры кодов, как показано ниже, будут работать.
func parseRequest(req *http.Request) error { var err error if err = req.ParseForm(); err != nil { log.Error("Error parsing form: %s", err) return err } _ = req.Form.Get("xxx") return nil }