일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- create table
- 실행권한
- centos
- appium
- 28015
- Materials
- nohup
- rethinkdb
- ftp
- ubuntu
- Jupyter Notebook
- sshpass
- PYTHON
- perfect
- openpyxl
- STF
- insert
- Jupyter
- port forwarding
- postgres
- ssh
- SWIFT
- kitura
- mysql
- nGrinder
- postgresql
- GoCD
- appium server
- nmap
- STF_PortForwarding
- Today
- Total
don't stop believing
Multipart/Urlencoded Form 본문
html의 form tag로 데이터를 보내고 확인해 보겠습니다.
https://github.com/gin-gonic/gin#multiparturlencoded-form
먼저 아래와같이 html 페이지가 있다가 가정해 보겠습니다.
<html> <head> <title>Tongchun's go gin</title> </head> <body> <form action="http://localhost:8080/form_post" method="POST"> message: <input type="text" name="message"> nick: <input type="text" name="nick"> <input type="submit" value="Submit"> </form> </body> </html>
form tag의 action은 데이터를 넘기는 url입니다. method는 post로 넘어갑니다.
넘기는 데이터로는 message와 nick이 있습니다.
실행하면 아래와 같은 화면입니다.
이제 go 코드 입니다.
package main import ( "github.com/gin-gonic/gin" ) func setupRouter() *gin.Engine { // Disable Console Color // gin.DisableConsoleColor() r := gin.Default() r.POST("/form_post", formPost) return r } func formPost(c *gin.Context) { message := c.PostForm("message") nick := c.DefaultPostForm("nick", "anonymous") headerType := c.GetHeader("Content-Type") c.JSON(200, gin.H{ "status": "posted", "message": message, "nick": nick, "header-content-type": headerType, }) } func main() { r := setupRouter() // Listen and Server in 0.0.0.0:8080 r.Run(":8080") }
라우터 설정은 POST method로 경로는 /form_post 입니다. formPost 핸들러 함수가 실행됩니다.
r.POST("/form_post", formPost)
formPost() 함수는 아래와 같습니다.
func formPost(c *gin.Context) {
message := c.PostForm("message")
nick := c.DefaultPostForm("nick", "anonymous")
headerType := c.GetHeader("Content-Type")
c.JSON(200, gin.H{
"status": "posted",
"message": message,
"nick": nick,
"header-content-type": headerType,
})
}
PostForm() 함수와 DefaultPostForm() 함수로 form tag로 넘어온 데이터를 받을 수 있습니다.
그리고 넘어온 request의 header 데이터 중 Content-Type을 확인하기 위해 하나 넣었습니다.
그리고 넘어온 데이터를 json 형태로 response 합니다.
이제 실행하고 form tag를 이용해 데이터를 넘겨 보겠습니다.
$ go run server.go [GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached. [GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production. - using env: export GIN_MODE=release - using code: gin.SetMode(gin.ReleaseMode) [GIN-debug] POST /form_post --> main.formPost (3 handlers) [GIN-debug] Listening and serving HTTP on :8080
다시 html 페이지를 열고 message에 hello!, nick에는 tongchun을 넣어 보겠습니다.
submit을 클릭해 response되는 json 데이터를 확인해 보겠습니다.
{"header-content-type":"application/x-www-form-urlencoded","message":"hello!","nick":"tongchun","status":"posted"}
form tag로 넘긴 데이터가 잘 전달됩니다.
header의 Content-Type은 application/x-www-form-urlencoded로 확인됩니다.
이번에는 form에 아무런 데이터도 없이 전달하겠습니다.
message와 nick 모두 빈 공백으로 전달되네요. 그럼 DefaultPostForm() 함수의 "anonymous"값은 언제 넘어 오는 걸까요?
html 페이지의 form tag 중 nick에 해당하는 input을 제거해 봤습니다.
message에는 hello! 를 입력하고 submit을 클릭합니다.
nick에 "anonymous"가 보입니다. DefaultPostform() 함수의 default 값은 전달되는 값이 빈 공백이 아닌 parameter 자체가 없을 경우 default 설정값이 전달되게 됩니다.
만약 postman과 같은 도구로 확인해야 할 경우 아래와 같이 작성하면 됩니다.
여기까지 form tag를 이용한 전달 받법이었습니다.
'Golang > Gin' 카테고리의 다른 글
Map as querystring or postform parameters (0) | 2019.02.27 |
---|---|
Another example: query + post form (0) | 2019.02.15 |
Querystring parameters (0) | 2019.02.14 |
Parameters in path (0) | 2019.02.13 |
Using GET, POST, PUT, PATCH, DELETE and OPTIONS (0) | 2019.02.13 |