使用go发送http POST请求

  1. 使用场景
  2. 简单实现POST字符串
  3. 编译脚本

使用场景

主要用于需要简单的POST一串字符串到某服务器,但是curl命令又没有的安装的情况,比如docker镜像中

简单实现POST字符串

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
package main

import (
"bytes"
"crypto/tls"
"flag"
"fmt"
"io/ioutil"
"net/http"
"os"
)

var (
s bool
h bool
t string
b string
resp *http.Response
err error
)

func init() {
flag.BoolVar(&h, "h", false, "this help")
flag.BoolVar(&s, "s", false, "Insecure SSL Skip Verify, default false")

flag.StringVar(&t, "u", "", "url")
flag.StringVar(&b, "b", "", "'{\"key\":\"value\"}'")
// 改变默认的 Usage,flag包中的Usage 其实是一个函数类型。这里是覆盖默认函数实现,具体见后面Usage部分的分析
flag.Usage = usage
}

func usage() {
fmt.Fprintf(os.Stderr, `http POST application/json
Usage: gohttppost [-h] [-u url] [-b body]

Options:
`)
flag.PrintDefaults()
}

func main() {
flag.Parse()

if h {
flag.Usage()
os.Exit(0)
}

payloadBytes := []byte(b)
body := bytes.NewReader(payloadBytes)
req, err := http.NewRequest("POST", t, body)
if err != nil {
fmt.Println("err:", "http.NewRequest:", err)
}
req.Header.Set("Content-Type", "application/json")

// 判断是否校验SSL证书
if s {
tr := &http.Transport{
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
}
client := http.Client{Transport: tr}
resp, err = client.Do(req)

} else {
resp, err = http.DefaultClient.Do(req)
}

if err != nil {
fmt.Println("err:", "http client request:", err)
}
defer resp.Body.Close()
fmt.Println("response Status:", resp.Status)
resBody, _ := ioutil.ReadAll(resp.Body)
fmt.Println("response Body:", string(resBody))
}

编译脚本

1
2
3
4
5
6
7
#!/bin/bash
CGO_ENABLED=0 GOOS=linux go build -a -ldflags "-w" -o gohttppost main.go

# -a 强制编译所有依赖包。
# -s 去掉符号信息
# -w 去掉DWARF调试信息,得到的程序就不能用gdb调试了
# 不建议s和w同时使用。

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 rootid@126.com

文章标题:使用go发送http POST请求

本文作者:Shawn

发布时间:2019-08-07, 11:32:49

最后更新:2019-08-07, 11:44:40

原始链接:https://gitrootid.github.io/2019/08/07/golang/go-http-post_/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏