일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- STF
- ftp
- nohup
- port forwarding
- mysql
- 실행권한
- create table
- postgresql
- Materials
- ubuntu
- Jupyter Notebook
- PYTHON
- perfect
- postgres
- insert
- appium server
- rethinkdb
- nGrinder
- STF_PortForwarding
- kitura
- centos
- ssh
- openpyxl
- GoCD
- appium
- nmap
- SWIFT
- sshpass
- 28015
- Jupyter
- Today
- Total
don't stop believing
Header와 body 확인하기 본문
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 |