don't stop believing

Header와 body 확인하기 본문

Golang/Web App

Header와 body 확인하기

Tongchun 2019. 2. 9. 12:28

Request에서 header정보와 body string을 확인해 보겠습니다.

package main

import (
	"fmt"
	"net/http"
)

// read all header string
func headers(w http.ResponseWriter, r *http.Request) {
	h := r.Header
	fmt.Fprintln(w, h)
}

// read a Accep-Encoding in header string
func headersEncoding(w http.ResponseWriter, r *http.Request) {
	h := r.Header["Accept-Encoding"]
	fmt.Fprintln(w, h)
}

// read a Accep-Encoding in header string by get method
func headersGet(w http.ResponseWriter, r *http.Request) {
	h := r.Header.Get("Accept-Encoding")
	fmt.Fprintln(w, h)
}

// read a body string
func bodyString(w http.ResponseWriter, r *http.Request) {
	len := r.ContentLength
	body := make([]byte, len)
	r.Body.Read(body)
	fmt.Fprintln(w, string(body))
}

func main() {
	server := http.Server{
		Addr: "127.0.0.1:8080",
	}

	http.HandleFunc("/headers", headers)
	http.HandleFunc("/headers/encoding", headersEncoding)
	http.HandleFunc("/headers/get/encoding", headersGet)
	http.HandleFunc("/body", bodyString)

	server.ListenAndServe()
}

먼저 확인할 것은 header 전체 내용을 확인하는 방법입니다.

// read all header string

func headers(w http.ResponseWriter, r *http.Request) {

h := r.Header

fmt.Fprintln(w, h)

}

http.Request 포인터 주소를 받은 r에 Header Property는 header 전체 내용을 가지고 있습니다.

브라우저에서 localhost:8080/headers를 호출해 보겠습니다.

header 전체 내용이 보이네요. 이제 특정 내용을 뽑아내보겠습니다. 

Accept-Encoding를 보고싶다면 아래처럼 map 타입처럼 확인하면 됩니다.

h := r.Header["Accept-Encoding"]


/headers/encoding 경로에 header의 Accept-Encoding을 출력하게 했습니다.

header의 Accept-Encoding 값이 Arrays 타입 그대로 보입니다.

[gzip, deflate, br]


이걸 바로 사용할 수 있도록 Get Method를 사용해 콤마로 구분된 값으로 얻을 수 있습니다.

h := r.Header.Get("Accept-Encoding")


/headers/get/encoding 경로에 get method를 사용해 출력하게 했습니다.

이번에는 body string을 확인해 보겠습니다.

// read a body string

func bodyString(w http.ResponseWriter, r *http.Request) {

len := r.ContentLength

body := make([]byte, len)

r.Body.Read(body)

fmt.Fprintln(w, string(body))

}

body string을 확인하려면 먼저 body의 길이를 r.ContentLength로 확인해야 합니다.  그리고 그 길이만큼의 byte를 담을 수 있는 slice를 만들어 줍니다. slice를 만들때는 make()를 사용합니다. 이제 r.Body.Read() Method로 만들어논 slice에 담습니다.

body string이 담긴 slice를 string으로 변환해 보여줍니다.


body string을 보내려면 post 요청이 필요합니다. postman으로 요청해 보겠습니다.

/body 경로에 요청한 body를 그대로 보여주도록 만들었습니다.

여기까지 header와 body를 확인하는 방법이었습니다.

body의 json을 parsing하는 방법은 다음에 올리겠습니다.


'Golang > Web App' 카테고리의 다른 글

Handler와 Multiplexer 이해하기  (0) 2019.02.07
체이닝 함수  (0) 2019.02.06
핸들링 요청과 핸들링 함수  (0) 2019.02.02
첫 번째 웹 서버(Hello Tongchun!)  (0) 2019.01.31
Comments