Golang 네트워크 요청
설명
본고는 주로 서버와 클라이언트로 나뉜다
서버
서버 감청 http 요청 유형은 주로 다음과 같은 몇 가지 방식으로 사용됩니다.
get의form 폼 분석
func GetService(w http.ResponseWriter, r *http.Request) {
// get form
r.ParseForm()
fmt.Println(r.Form["name"])
fmt.Println(r.Form["sex"])
fmt.Println(strings.Join(r.Form["name"], "-"))
fmt.Println(strings.Join(r.Form["sex"], "-"))
for k, v := range r.Form {
fmt.Println(k, "=>", v, strings.Join(v, "-"))
}
//
fmt.Fprint(w, "It works")
}
post를 해석하는 방식으로 json 대상을 해석합니다.
func PostService(w http.ResponseWriter, r *http.Request){
// body
body , err := ioutil.ReadAll(r.Body)
if err != nil {
fmt.Println("read fail")
return
}
// body string
bodyStr := string(body)
fmt.Println("bodyStr", bodyStr)
// , body struct
var user User
err1 := json.Unmarshal(body, &user)
if err1 != nil{
fmt.Println("unmarshal fail")
return
}
fmt.Println("user", user.Name, user.Sex)
//
fmt.Fprint(w, "Post is works")
}
폼으로postform 데이터 제출 분석
func PostFormService(w http.ResponseWriter, r *http.Request) {
// body
r.ParseForm()
fmt.Println(r.Form["name"])
fmt.Println(r.Form["sex"])
fmt.Println(strings.Join(r.Form["name"], "-"))
fmt.Println(strings.Join(r.Form["sex"], "-"))
for k, v := range r.Form {
fmt.Println(k, "=>", v, strings.Join(v, "-"))
}
//
fmt.Fprint(w, "Post is works")
}
서버가 사용하는 구조체
type User struct {
Name string `json:"name"`
Sex string `json:"sex"`
}
서버를 여는 방법:
http.HandleFunc("/get", GetService)
http.HandleFunc("/post", PostService)
http.HandleFunc("/postform", PostFormService)
//
if err := http.ListenAndServe("127.0.0.1:8888", nil); err != nil {
fmt.Println("service start err")
}
클라이언트
클라이언트 요청 방식은 다음과 같습니다.
Get 요청 시작
func GetTest() {
// url
u, err := url.Parse("http://localhost:8888/get?")
if err != nil {
fmt.Println("url parse fail")
return
}
q := u.Query()
q.Set("name", "wnw")
q.Set("sex", "wowam")
u.RawQuery = q.Encode()
// get
resp, err1 := http.Get(u.String())
if err1 != nil || resp.StatusCode != http.StatusOK{
fmt.Println("get fail:", err1)
return
}
defer resp.Body.Close()
//
body, err2 := ioutil.ReadAll(resp.Body)
if err2 != nil {
fmt.Println("read body fail")
return
}
fmt.Println(string(body))
//
}
포스트 요청 시작
func PostTest() {
u := "http://localhost:8888/post?"
user := MyUser{" "," "}
//
body, err := json.Marshal(user)
if err != nil {
fmt.Println("marshal fail")
return
}
resp, err1 := http.Post(u, "application/x-www-form-urlencoded", strings.NewReader(string(body)))
if err1 != nil {
fmt.Println("post fail")
return
}
//
defer resp.Body.Close()
b, err2 := ioutil.ReadAll(resp.Body)
if err2 != nil {
fmt.Println("read body fail")
return
}
fmt.Println(string(b))
}
PostForm 요청 시작
func PostFormTest() {
//
u, err := url.Parse("http://localhost:8888/postform?")
if err != nil {
fmt.Println("parse is fail")
return
}
q := u.Query()
q.Set("name", " ")
q.Set("sex", " ")
// post
resp, err1 := http.PostForm(u.String(), q)
if err1 != nil {
fmt.Println("post fail")
return
}
//
defer resp.Body.Close()
body, err2 := ioutil.ReadAll(resp.Body)
if err2 != nil{
fmt.Println("body fail")
return
}
fmt.Println(string(body))
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.