go语言的网络功能比较强大,使用go语言实现http 协议的推送非常简单,这里做了个简单的post推送示例。
代码
package mainimport ("bytes""fmt""io/ioutil""crypto/tls""net/http""flag"
)type Data struct {Name string `json:"name"`
}func main() {// JSON数据var payloadBytes string;var url stringflag.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