Go의 http 패키지에서 POST 요청에 대한 쿼리 문자열을 어떻게 얻습니까? 위해 Go

httpPOST 요청을 처리하기 위해 Go 의 패키지를 사용하고 있습니다. Request객체 에서 쿼리 문자열의 내용에 액세스하고 구문 분석하려면 어떻게 해야합니까? 공식 문서에서 답을 찾을 수 없습니다.



답변

QueryString은 정의 에 따라 URL에 있습니다. req.URL( doc )를 사용하여 요청의 URL에 액세스 할 수 있습니다 . URL 객체에는 단순히 QueryString 매개 변수 중 하나 인 유형 을 반환 하는 Query()메서드 ( doc )가 있습니다.Valuesmap[string][]string

찾고있는 것이 HTML 양식에 의해 제출 된 POST 데이터 인 경우 이는 일반적으로 요청 본문의 키-값 쌍입니다. 전화를 걸고 필드를 ParseForm()사용 req.Form하여 키-값 쌍의 맵을 가져올 수 있다는 대답이 정확 하지만 FormValue(key)특정 키의 값을 가져 오기 위해 호출 할 수도 있습니다 . ParseForm()필요한 경우 호출 하고 전송 된 방법 (예 : 쿼리 문자열 또는 요청 본문)에 관계없이 값을 가져옵니다.


답변

다음은 GET 매개 변수에 액세스하는 방법에 대한보다 구체적인 예입니다. Request객체는 호출을 위해 그들을 파싱하는 방법이 있습니다 쿼리 :

http : // host : port / something? param1 = b 와 같은 요청 URL 가정

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=&param2= param1 will also be "" :|
  }

  // if multiples possible, or to process empty values like param1 in
  // ?param1=&param2=something
  param1s := r.URL.Query()["param1"]
  if len(param1s) > 0 {
    // ... process them ... or you could just iterate over them without a check
    // 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 := r.FormValue("field")

더 많은 정보를 위해서. http 패키지에 대한 자세한 내용은 여기에서 설명서를 참조하십시오 . FormValue기본적으로 POST 또는 PUT 값 또는 GET 값을 첫 번째로 찾은 순서대로 반환합니다.


답변

다음은 간단하고 작동하는 예입니다.

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)
}

여기에 이미지 설명 입력


답변

쿼리 매개 변수를 가져 오는 방법에는 두 가지가 있습니다.

  1. reqeust.URL.Query () 사용
  2. request.Form 사용

두 번째 경우 본문 매개 변수가 쿼리 매개 변수보다 우선하므로주의해야합니다. 쿼리 매개 변수 가져 오기에 대한 전체 설명은 여기에서 찾을 수 있습니다.

https://golangbyexample.com/net-http-package-get-query-params-golang


답변

아래 단어는 공식 문서에서 가져온 것입니다.

양식에는 URL 필드의 쿼리 매개 변수POST 또는 PUT 양식 데이터를 포함하여 파싱 된 양식 데이터가 포함 됩니다 . 이 필드는 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
}


답변