net/http触り直し(1)
GolangでWAFを使わなくても問題ない的な話が年末上がっていたのと(advent calendar界隈で)自分的にもそう思ったので RequestのBodyやらHeaderやらを適当にParseする方法を復習がてらメモ。
package main import ( "fmt" "log" "net/http" "github.com/davecgh/go-spew/spew" "github.com/julienschmidt/httprouter" ) func main() { router := httprouter.New() router.GET("/test", testFuncGET) router.POST("/test", testFuncPost) log.Fatal(http.ListenAndServe(":9999", router)) } func testFuncGET(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { h := r.Header spew.Dump(h) val := h.Get("Hoge") fmt.Println("=======") fmt.Println(val) fmt.Println("=======") q := r.URL.Query() spew.Dump(q) } func testFuncPost(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { r.ParseForm() f := r.Form spew.Dump(f) }
httprouter
くらいは使わないとさすがにアレなコードになる気はしている。
curl "http://localhost:9999/test" -H "Hoge:Fugaaa" -XPOST -d "a=1" -d "a=2" -d "a=3" -d "vals=[{'key':'value1'},{'key':'value2']"
(string) (len=1) "v": ([]string) (len=1 cap=1) { (string) (len=5) "1,2,3" } } (url.Values) (len=2) { (string) (len=4) "vals": ([]string) (len=1 cap=1) { (string) (len=34) "[{'key':'value1'},{'key':'value2']" }, (string) (len=1) "a": ([]string) (len=3 cap=4) { (string) (len=1) "1", (string) (len=1) "2", (string) (len=1) "3" } }
-d "a=1" -d "a=2" -d "a=3"
この送り方で配列になるのは意外だった。RFCにでもそう書いてあるのだろうか(調べるか)