go http请求

一、效果:通过命令行输入信息,进行http请求,获取响应内容

1.设置命令行输入变量

//命令行解析
var name string
flag.StringVar(&name, "name", "", "project name")
var description string
flag.StringVar(&description, "desc", "", "project description")
var user string
flag.StringVar(&user, "user", "", "create user")
//参数被解析到三个变量上
flag.Parse()

flag.Parse():解析命令行参数,值保存到定义的flag,这样当你在命令行中输入

conf.yaml文件

server:
  host: 10.112.185.41
  port: 8081

2.读取conf.yaml

config, err := yaml.ReadFile("D:/goWork/src/azkaban-job-go/conf.yaml")
if err != nil {
    fmt.Println(err)
}
client := &http.Client{}
host, _ := config.Get("server.host")
port, _ := config.Get("server.port")

3.发送请求,获取响应

//发送请求
url := "http://" + host + ":" + port + "/manager" //生产
args := "action=create&session.id=" + session.SessionID + "&name=" + name + "&description=" + description
req, err := http.NewRequest("POST", url, strings.NewReader(args))
req.Header.Set("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8") //设置请求头信息
resp, err := client.Do(req)
if err != nil {
    fmt.Println(err)
}
//关闭response响应
defer resp.Body.Close()
//读取返回内容
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
    fmt.Println(err)
}
fmt.Println(string(body))

4.命令行输入:

D:\goWork\src\azkaban-job-go\client>go build create.go
D:\goWork\src\azkaban-job-go\client>create.exe -name=abc -user=dw -desc=123

返回body内容

{"path":"manager?project=abc","action":"redirect","status":"succ
ess"}

如果想要部署到Linux系统上,需要进行go的交叉编译,具体参考《go交叉编译》

SET CGO_ENABLED=0
SET GOOS=linux
SET GOARCH=amd64
go build main.go

二、upload上传文件

//创建新的写入
body_buf := new(bytes.Buffer)
body_writer := multipart.NewWriter(body_buf)
//创建form上传文件
formFile, err := body_writer.CreateFormFile("file", filename)
if err != nil {
    fmt.Println("error writing to buffer")
}

//打开要发送的文件
srcFile, err := os.Open(filename)
if err != nil {
    log.Fatalf("%Open source file failed: s\n", err)
}
defer srcFile.Close()

//copy操作
if _, err = io.Copy(formFile, srcFile); err != nil {
    log.Fatalf("Write to form file falied: %s\n", err)
}

// 发送表单
contentType := body_writer.FormDataContentType()
body_writer.Close() // 发送之前必须调用Close()以写入结尾行
req, err := http.NewRequest("POST", url, body_buf)
req.Header.Set("Content-Type", contentType) //设置请求头信息

具体参照:《golang模拟上传》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值