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及info的对像这两个参数发给login函数把结构体对象转换成json,
2.用POST方法提交JSON的数据到服务器上
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)
}