go语言的网络功能比较强大,使用go语言实现http 协议的推送非常简单,这里做了个简单的post推送示例。
代码
package main import ( "bytes" "fmt" "io/ioutil" "crypto/tls" "net/http" "flag" ) type Data struct { Name string `json:"name"` } func main() { // JSON数据 var payloadBytes string; var url string flag.StringVar(&payloadBytes, "c", "", "内容") flag.StringVar(&url, "d", "", "url") flag.Parse() //fmt.Println(payloadBytes) bytestr := []byte(payloadBytes) //在认证的时候,忽略证书校验, tr := &http.Transport{ TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, } // HTTP POST请求 req, err := http.NewRequest("POST", url, bytes.NewBuffer(bytestr)) if err != nil { panic(err) } // 设置Content-Type头部信息 req.Header.Set("Content-Type", "application/json") // 创建客户端并发送请求 client := &http.Client{Transport: tr} resp, err := client.Do(req) if err != nil { panic(err) } defer resp.Body.Close() // 获取响应结果 body, _ := ioutil.ReadAll(resp.Body) responseString := string(body) // 输出响应结果 fmt.Println(responseString) }
测试运行:
go run main.go -d http://192.168.1.168/cgi-bin/file/post -c "{\"test\": 1}" {"code": "200"} --收到的应答消息 //服务端接收的信息: method: POST data: {"test": 1}
总结
以上代码里,使用flag来获取命令行传递的入参。
在认证的时候,忽略服务端证书校验,
tr := &http.Transport{ TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, }
这里如果不忽略,可能会报如下错误:
x509: certificate signed by unknown authority