在go语言中通过Post的方法提交json的数据

简介: 1.把URL及info的对像这两个参数发给login函数把结构体对象转换成json,2.用POST方法提交JSON的数据到服务器上3.通过调用Client.Do方法得到服务器的响应response的JSON4.把服务器响应回来的JSON解析成结构体对象来存储相应的信息5.调用解析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及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)

}

相关文章
|
2月前
|
JSON 中间件 Java
【GoGin】(3)Gin的数据渲染和中间件的使用:数据渲染、返回JSON、浅.JSON()源码、中间件、Next()方法
我们在正常注册中间件时,会打断原有的运行流程,但是你可以在中间件函数内部添加Next()方法,这样可以让原有的运行流程继续执行,当原有的运行流程结束后再回来执行中间件内部的内容。​ c.Writer.WriteHeaderNow()还会写入文本流中。可以看到使用next后,正常执行流程中并没有获得到中间件设置的值。接口还提供了一个可以修改ContentType的方法。判断了传入的状态码是否符合正确的状态码,并返回。在内部封装时,只是标注了不同的render类型。再看一下其他返回的类型;
186 3
|
2月前
|
存储 安全 Java
【Golang】(4)Go里面的指针如何?函数与方法怎么不一样?带你了解Go不同于其他高级语言的语法
结构体可以存储一组不同类型的数据,是一种符合类型。Go抛弃了类与继承,同时也抛弃了构造方法,刻意弱化了面向对象的功能,Go并非是一个传统OOP的语言,但是Go依旧有着OOP的影子,通过结构体和方法也可以模拟出一个类。
211 1
|
4月前
|
Cloud Native 安全 Java
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
304 1
|
4月前
|
Cloud Native Go API
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
403 0
|
4月前
|
Cloud Native Java Go
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
262 0
|
4月前
|
Cloud Native Java 中间件
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
234 0
|
4月前
|
Cloud Native Java Go
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
338 0
|
4月前
|
数据采集 Go API
Go语言实战案例:多协程并发下载网页内容
本文是《Go语言100个实战案例 · 网络与并发篇》第6篇,讲解如何使用 Goroutine 和 Channel 实现多协程并发抓取网页内容,提升网络请求效率。通过实战掌握高并发编程技巧,构建爬虫、内容聚合器等工具,涵盖 WaitGroup、超时控制、错误处理等核心知识点。
|
4月前
|
数据采集 JSON Go
Go语言实战案例:实现HTTP客户端请求并解析响应
本文是 Go 网络与并发实战系列的第 2 篇,详细介绍如何使用 Go 构建 HTTP 客户端,涵盖请求发送、响应解析、错误处理、Header 与 Body 提取等流程,并通过实战代码演示如何并发请求多个 URL,适合希望掌握 Go 网络编程基础的开发者。
|
5月前
|
JSON 前端开发 Go
Go语言实战:创建一个简单的 HTTP 服务器
本篇是《Go语言101实战》系列之一,讲解如何使用Go构建基础HTTP服务器。涵盖Go语言并发优势、HTTP服务搭建、路由处理、日志记录及测试方法,助你掌握高性能Web服务开发核心技能。