package jpush import ( "encoding/base64" "fmt" "io" "io/ioutil" "net/http" "runtime" ) type Client struct { AppKey string MasterSecret string pushUrl string reportUrl string deviceUrl string } func NewClient(appKey, masterSecret string) *Client { client := &Client{AppKey: appKey, MasterSecret: masterSecret} client.pushUrl = "https://api.jpush.cn" client.reportUrl = "https://report.jpush.cn" client.deviceUrl = "https://device.jpush.cn" return client } func (c *Client) getAuthorization(isGroup bool) string { str := c.AppKey + ":" + c.MasterSecret if isGroup { str = "group-" + str } buf := []byte(str) return fmt.Sprintf("Basic %s", base64.StdEncoding.EncodeToString(buf)) } func (c *Client) getUserAgent() string { return fmt.Sprintf("(%s) go/%s", runtime.GOOS, runtime.Version()) } func (c *Client) request(method, link string, body io.Reader, isGroup bool) (*Response, error) { req, err := http.NewRequest(method, link, body) if err != nil { return nil, err } req.Header.Set("Authorization", c.getAuthorization(isGroup)) req.Header.Set("User-Agent", c.getUserAgent()) req.Header.Set("Content-Type", "application/json") client := &http.Client{} resp, err := client.Do(req) if err != nil { return nil, err } defer resp.Body.Close() buf, err := ioutil.ReadAll(resp.Body) if err != nil { return nil, err } return &Response{data: buf}, nil }