【GoLang】golang HTTP GET/POST JSON的服务端、客户端示例,包含序列化、反序列化

服务端代码示例:

package main

import (
"encoding/json"
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
) type User struct {
Name string `json:"name"`
Age int `json:"age"`
} func index(w http.ResponseWriter, r *http.Request) {
r.ParseForm()
fmt.Println("Form: ", r.Form)
fmt.Println("Path: ", r.URL.Path)
fmt.Println(r.Form["a"])
fmt.Println(r.Form["b"])
for k, v := range r.Form {
fmt.Println(k, "=>", v, strings.Join(v, "-"))
}
fmt.Fprint(w, "It works !")
} func test(w http.ResponseWriter, r *http.Request) {
body, _ := ioutil.ReadAll(r.Body)
// r.Body.Close()
body_str := string(body)
fmt.Println(body_str)
// fmt.Fprint(w, body_str)
var user User
// user.Name = "aaa"
// user.Age = 99
// if bs, err := json.Marshal(user); err == nil {
// fmt.Println(string(bs))
// } else {
// fmt.Println(err)
// } if err := json.Unmarshal(body, &user); err == nil {
fmt.Println(user)
user.Age +=
fmt.Println(user)
ret, _ := json.Marshal(user)
fmt.Fprint(w, string(ret))
} else {
fmt.Println(err)
}
} func main() {
http.HandleFunc("/", index)
http.HandleFunc("/test/", test) if err := http.ListenAndServe("0.0.0.0:8080", nil); err != nil {
log.Fatal("ListenAndServe: ", err)
}
}

客户端代码示例:

package main

import (
"fmt"
"io/ioutil"
// "log"
"net/http"
// "strings"
"bytes"
"encoding/json"
) type User struct {
Name string `json:"name"`
Age int `json:"age"`
} func main() {
resp, _ := http.Get("http://10.67.2.252:8080/?a=123456&b=aaa&b=bbb")
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(body)) var user User
user.Name = "aaa"
user.Age =
if bs, err := json.Marshal(user); err == nil {
// fmt.Println(string(bs))
req := bytes.NewBuffer([]byte(bs))
tmp := `{"name":"junneyang", "age": }`
req = bytes.NewBuffer([]byte(tmp)) body_type := "application/json;charset=utf-8"
resp, _ = http.Post("http://10.67.2.252:8080/test/", body_type, req)
body, _ = ioutil.ReadAll(resp.Body)
fmt.Println(string(body))
} else {
fmt.Println(err)
} client := &http.Client{}
request, _ := http.NewRequest("GET", "http://10.67.2.252:8080/?a=123456&b=aaa&b=bbb", nil)
request.Header.Set("Connection", "keep-alive")
response, _ := client.Do(request)
if response.StatusCode == {
body, _ := ioutil.ReadAll(response.Body)
fmt.Println(string(body))
} req := `{"name":"junneyang", "age": }`
req_new := bytes.NewBuffer([]byte(req))
request, _ = http.NewRequest("POST", "http://10.67.2.252:8080/test/", req_new)
request.Header.Set("Content-type", "application/json")
response, _ = client.Do(request)
if response.StatusCode == {
body, _ := ioutil.ReadAll(response.Body)
fmt.Println(string(body))
}
}

参考资料:

golang json.Marshal struct_百度搜索
golang json 成结构体 详解 - 为程序员服务
golang的json操作 - liaojie的个人页面 - 开源中国社区
go语言 获取post方式json | Go语言中文网 | Golang中文社区 | Golang中国
Golang Web编程的Get和Post请求发送与解析 - 推酷
go post json 遇到的问题 | Go语言中文网 | Golang中文社区 | Golang中国
Go语言_HTTP包 - 轩脉刃 - 博客园
golang中net/http包用法 | Go语言中文网 | Golang中文社区 | Golang中国
golang使用http client发起get和post请求示例 - 快乐编程
使用Golang 搭建http web服务器 - 轩脉刃 - 博客园
Golang Http Server源码阅读 - 轩脉刃 - 博客园
golang中发送http请求的几种常见情况 | Go语言中文网 | Golang中文社区 | Golang中国
golang语言中发起http请求 | Go语言中文网 | Golang中文社区 | Golang中国

golang http请求优化: https://www.douban.com/note/285372115/

goreq: 极简单的流式golang http client:  http://www.tuicool.com/articles/FNZbYjj

golang的http client源码简析:  http://studygolang.com/articles/5774

http://www.oschina.net/question/593413_119339

上一篇:Mac下用apache搭建一个局域网服务器


下一篇:MySQL 存储过程基本函数