golang http post 实验

在制作游戏服务器的时候,登录验证操作的时候,需要发起post请求给web服务器,来完成对于登录的校验。这篇文章记录一下使用golang常用的一些操作,方便今后需要的时候查阅。对于关于如何打包post,查看考了stackoverflow1

用json方式 post

讲数据打包成json

func (this *User) calcJson(cfg *Cfg) *bytes.Buffer {

	kvPairs := make(map[string]string)
	kvPairs["packageId"] = fmt.Sprintf("%d", cfg.PackageId)
	kvPairs["thirdUserId"] = fmt.Sprintf("%d", this.userId)
	kvPairs["token"] = this.token
	kvPairs["exInfo"] = this.exInfo
	kvPairs["sign"] = this.calcMd5(cfg)
	postJson, err := json.Marshal(kvPairs)
	if err != nil {
		logrus.Warnf("testLogin err: %v", err.Error())
		return nil
	}
	logrus.Debugf("postJson %v", string(postJson))
	return bytes.NewBuffer(postJson)
}

计算md5字符串

func (this *User) calcMd5(cfg *Cfg) string {

	w := md5.New()
	var buffer bytes.Buffer
	buffer.Write([]byte(string(this.userId)))
	buffer.WriteString(this.token)
	buffer.WriteString(string(cfg.AppId))
	buffer.WriteString(cfg.AppSecret)

	io.WriteString(w, buffer.String())
	md5str2 := fmt.Sprintf("%x", w.Sum(nil))

	return md5str
}

将一个json数据post出去

func postJson() {
	...
	url := cfg.getHost()

	user := &User{userId: 220,
		token:  "adfasfdasfdasfdsafdasfdasfdsafdsafdsa",
		exInfo: ""}

	resp, err := http.Post(url, "application/json", user.calcJson(cfg))
	if err != nil {
		log.Print(err)
	}
	defer resp.Body.Close()

	fmt.Printf("Status: %s\n", resp.Status)
	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		logrus.Warnf("testLogin err: %v", err.Error())
		return
	}
	logrus.Debug(string(body))
}

使用连接串方式来 post出去

填充字串

func (this *User) calcText(cfg *Cfg) url.Values {
	return url.Values{""packageId":   {fmt.Sprintf("%d", cfg.PackageId)},
		"thirdUserId": {fmt.Sprintf("%d", this.userId)},
		"token":       {this.token},
		"exInfo":      {this.exInfo},
		"sign":        {this.calcMd5(cfg)}}
}

将字串发送出去

func postText() {
	cfg := readCfg()
	url := cfg.getHost()

	user := &User{userId: 220,
		token:  "adfasfdasfdasfdsafdasfdasfdsafdsafdsa",
		exInfo: ""}

	val := user.calcText(cfg)
	logrus.Debugf("postText rawStr: %v", val.Encode())
	response, err := http.PostForm(url, val)
	if err != nil {
		logrus.Fatalf("postText err: %v", err.Error())
	}

	defer response.Body.Close()
	body, err := ioutil.ReadAll(response.Body)

	if err != nil {
		logrus.Fatalf("postText err: %v", err.Error())
	}

	fmt.Printf("%s\n", string(body))
}

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值