This repository was archived by the owner on Aug 4, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathhttp.go
133 lines (125 loc) · 2.67 KB
/
http.go
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
package wechat
import (
"bytes"
"encoding/json"
"io"
"io/ioutil"
"mime/multipart"
"net/http"
"net/url"
"strings"
)
// Post send post request.
func Post(url, contentType string, args map[string]string) (result string, err error) {
if contentType == "" {
contentType = "application/x-www-form-urlencoded"
}
resp, err := http.Post(url, contentType, strings.NewReader(argsEncode(args)))
if err != nil {
return
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return
}
err = NewError(body)
if err != nil {
return
}
result = string(body)
return
}
// VideoDescription 视频描述
type VideoDescription struct {
Title string `json:"title"` // 视频素材的标题
Introduction string `json:"introduction"` // 视频素材的描述
}
// Upload send post request.
func Upload(uri, filename string, description *VideoDescription, srcFile io.Reader) (result []byte, err error) {
buf := new(bytes.Buffer)
// 文件
writer := multipart.NewWriter(buf)
formFile, err := writer.CreateFormFile("media", filename)
if err != nil {
return nil, err
}
if _, err = io.Copy(formFile, srcFile); err != nil {
return nil, err
}
contentType := writer.FormDataContentType()
// 附加参数
if description != nil {
jsonBytes, _ := json.Marshal(description)
writer.WriteField("description", string(jsonBytes))
}
writer.Close() // 发送之前必须调用Close()以写入结尾行
resp, err := http.Post(uri, contentType, buf)
if err != nil {
return
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return
}
err = NewError(body)
if err != nil {
return
}
result = body
return
}
// PostJSON send post request.
func PostJSON(url string, jsonObject interface{}) (result []byte, err error) {
buf := new(bytes.Buffer)
hjson := json.NewEncoder(buf)
hjson.SetEscapeHTML(false)
err = hjson.Encode(jsonObject)
if err != nil {
return
}
resp, err := http.Post(url, "application/json", buf)
if err != nil {
return
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return
}
err = NewError(body)
if err != nil {
return
}
result = body
return
}
// Get send get request.
func Get(url string, args map[string]string) (result []byte, err error) {
if args != nil {
url += "?" + argsEncode(args)
}
resp, err := http.Get(url)
if err != nil {
return
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return
}
err = NewError(body)
if err != nil {
return
}
result = body
return
}
func argsEncode(params map[string]string) string {
args := url.Values{}
for k, v := range params {
args.Set(k, v)
}
return args.Encode()
}