在Ubuntu 16.04.3 LTS上运行go+https+json示例

下面是我依据网上资料的实操过程,记录以作备忘。该示例给出了https通信并处理json文件的例子。

平台:Ubuntu 16.04.3 LTS

go版本:1.10

1.生成自签名的服务器端的私钥KEY和公钥证书

openssl genrsa -out server.key 2048


openssl req -new -x509 -key server.key -out server.crt -days 3650


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


./client

参考文献
[1].https://www.cnblogs.com/woodzcl/p/7569668.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值