Golang用POST方法发送JSON数据到服务器

package main

import (
	"bytes"
	"encoding/json"
	"flag"
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

//将获取到的工号和密码解析成JSON
type info struct {
	EmpCode     string `json:"empCode"`
	EmpPassword string `json:"empPassword"`
}

func NewInfo(empcode, emppasswd string) *info {
	return &info{
		EmpCode:     empcode,
		EmpPassword: emppasswd,
	}
}

//返回解析JSON后的个人及部门信息
type PersonInfo struct {
	EmpCode  string
	EmpName  string
	EmpPhone string
	OrgName  string
}

//返回解析JSON后服务器的状态信息
type BaseInfo struct {
	StatusCode        int
	Success           bool
	ErrCode           interface{}
	ErrMsg            interface{}
	Body              PersonInfo
	Msg               string
	BussinessCategory int64
}

/*
1.把URL以及工号密码生成的结构体对象,这两个参数发给login函数
2.把结构体对像转换成JSON格式后,用POST方法发送请求到服务器上
3.通过调用Client.Do方法得到服务器的响应response的JSON
4.把服务器响应回来的JSON解析成结构体对象来存储相应的信息
5.调用解析JSON的结构体对象的各属性得到相应的信息
*/
func login(url string, i *info) {
	data, err := json.Marshal(i)
	if err != nil {
		log.Fatal(err)
	}
	req, err := http.NewRequest("POST", url, bytes.NewBuffer(data))
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/json")
	var client = http.DefaultClient
	response, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer response.Body.Close()
	BodyData, err := ioutil.ReadAll(response.Body)
	if err != nil {
		log.Fatal(err)
	}
	var info = BaseInfo{}
	err = json.Unmarshal(BodyData, &info)
	if err != nil {
		log.Fatal(err)
	}
	switch info.StatusCode {
	case 200:
		fmt.Printf("%s 工号: %s 姓名: %s 部门: %s 联系电话: %s\n", info.Msg, info.Body.EmpCode, info.Body.EmpName, info.Body.OrgName, info.Body.EmpPhone)
	case 500:
		fmt.Printf("登录失败,%s", info.Msg)
		return
	}
}
func main() {
	var url = "http://xxxxxx"
	var empCode, emPasswd string
	flag.StringVar(&empCode, "c", "", "输入工号:xxxxxx")
	flag.StringVar(&emPasswd, "p", "", "输入身份证后六位")
	flag.Parse()
	ip := NewInfo(empCode, emPasswd)
	login(url, ip)
}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值