下面是我依据网上资料的实操过程,记录以作备忘。该示例给出了https通信并处理json文件的例子。
平台:Ubuntu 16.04.3 LTS
go版本:1.10
1.生成自签名的服务器端的私钥KEY和公钥证书
openssl genrsa -out server.key 2048
2.编写https通信的服务器和客户端程序
server.go
package main import ( "encoding/json" "fmt" "net/http" ) type MyData struct { Name string `json:"item"` Other float32 `json:"amount"` } //仅是构造一个json数据并发送给客户端 func handler(w http.ResponseWriter,r *http.Request) { var detail MyData detail.Name = "1" detail.Other = 2 body,err := json.Marshal(detail) if err != nil { panic(err.Error()) } fmt.Fprintf(w,string(body)) } func main() { http.HandleFunc("/",handler) fmt.Println("http server listen at 8086") http.ListenAndServeTLS(":8086","server.crt","server.key",nil) }client.go
package main import ( "crypto/tls" "encoding/json" "fmt" "github.com/bitly/go-simplejson" "io/ioutil" "net/http" ) type MyData struct { Name string `json:"item"` Other float32 `json:"amount"` } func main() { tr := &http.Transport{ TLSClientConfig: &tls.Config{InsecureSkipVerify: true},} client := &http.Client{Transport: tr} resp,err := client.Get("https://localhost:8086") if err != nil { fmt.Println("error:",err) return } defer resp.Body.Close() body,err := ioutil.ReadAll(resp.Body) fmt.Println(string(body)) //decode json js,err := simplejson.NewJson(body) if err != nil { panic(err.Error()) } fmt.Printf("%T:%v\n",js,js) var res MyData err = json.Unmarshal([]byte(body),&res) fmt.Println(res) fmt.Println(res.Name,res.Other) }
3.安装client.go中需要的依赖库go-simplejson
go get -v -u -t github.com/bitly/go-simplejson
4.编译生成服务器和客户端程序
go build server.go
go build client.go
5.运行并看到结果
打开两个终端,分别运行server和client程序
./server
参考文献 [1].https://www.cnblogs.com/woodzcl/p/7569668.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。