Go语言
# POST 发送
package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"net/http"
"time"
)
func sendMessage() error {
channelCode := "4d05f4abdb0a0c2a0269900809946903"
payload := map[string]interface{}{
"head": "测试标题", // 必填
"body": "测试内容", // 选填
"url": "", // 选填:点击跳转链接
}
bytesData, err := json.Marshal(payload)
if err != nil {
return err
}
apiURL := fmt.Sprintf("https://www.phprm.com/services/push/send/%s", channelCode)
req, err := http.NewRequest(http.MethodPost, apiURL, bytes.NewReader(bytesData))
if err != nil {
return err
}
req.Header.Set("Content-Type", "application/json;charset=UTF-8")
client := &http.Client{Timeout: 10 * time.Second}
resp, err := client.Do(req)
if err != nil {
return err
}
defer resp.Body.Close() // 务必关闭响应体,避免连接泄漏
respBytes, err := io.ReadAll(resp.Body) // Go 1.16+ 使用 io.ReadAll,不要再用废弃的 ioutil.ReadAll
if err != nil {
return err
}
fmt.Printf("HTTP %d\n%s\n", resp.StatusCode, string(respBytes))
return nil
}
func main() {
if err := sendMessage(); err != nil {
fmt.Println("推送失败:", err)
}
}
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
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
注意
- Go 1.16 起
io/ioutil已废弃,请使用io.ReadAll。 []byte转字符串直接用string(respBytes)即可,不要用unsafe.Pointer强转——那种写法绕过了内存安全保证,且容易产生难以排查的问题。- 记得
defer resp.Body.Close(),否则会造成连接泄漏。
# GET 发送(最简单)
package main
import (
"fmt"
"io"
"net/http"
"net/url"
"time"
)
func main() {
channelCode := "4d05f4abdb0a0c2a0269900809946903"
apiURL := fmt.Sprintf("https://www.phprm.com/services/push/trigger/%s", channelCode)
params := url.Values{}
params.Set("head", "测试标题")
params.Set("body", "测试内容")
client := &http.Client{Timeout: 10 * time.Second}
resp, err := client.Get(apiURL + "?" + params.Encode()) // params.Encode() 自动处理中文编码
if err != nil {
fmt.Println("推送失败:", err)
return
}
defer resp.Body.Close()
respBytes, _ := io.ReadAll(resp.Body)
fmt.Println(string(respBytes))
}
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
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
Last Updated: 2026/09/11, 21:21:10