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