/* 工具:网络 */ package tools import ( "bytes" "crypto/tls" "encoding/json" "fmt" "io" "net/http" "os" "time" mailer "gopkg.in/gomail.v2" ) // 下载网上图片 func DownLoadFile(url string, filename string) (ok bool) { resp, err := http.Get(url) if err != nil { // fmt.Println(err.Error()) return false } defer resp.Body.Close() bytes, err := io.ReadAll(resp.Body) if err != nil { // fmt.Println(err.Error()) return false } //写出数据 err = os.WriteFile(filename, bytes, 0666) if err != nil { fmt.Println(err.Error()) return false } else { return true } } // 发送POST请求 // url:请求地址,data:POST请求提交的数据,contentType:请求体格式,如:application/json // content:请求放回的内容 func HttpPost(url string, data interface{}, contentType string) (ret []byte) { if contentType == "" { contentType = "application/json" } jsonStr, _ := json.Marshal(data) req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonStr)) req.Header.Add("content-type", contentType) if err != nil { return } defer req.Body.Close() client := &http.Client{Timeout: 10 * time.Second} resp, error := client.Do(req) if error != nil { // 超时等错误 return } defer resp.Body.Close() ret, _ = io.ReadAll(resp.Body) return } // 发送Get请求 func HttpGet(url string) ([]byte, map[string]interface{}, error) { var wxMap map[string]interface{} resp, err := http.Get(url) if err != nil { return nil, nil, err } defer resp.Body.Close() body, _ := io.ReadAll(resp.Body) err = json.Unmarshal(body, &wxMap) return body, wxMap, err } // http get带参数,带头设置 // para 发现不能带参数,有空检查 func HttpPostWithParaHeader(url string, header map[string]string, para map[string]string) []byte { req, err := http.NewRequest("POST", url, nil) if err != nil { return nil } for i, n := range header { req.Header.Add(i, n) } q := req.URL.Query() for i, n := range para { q.Add(i, n) } req.URL.RawQuery = q.Encode() client := &http.Client{} resp, err := client.Do(req) if err != nil { fmt.Println(err.Error()) return nil } defer resp.Body.Close() body, _ := io.ReadAll(resp.Body) return body } // http get带参数,带头设置 func Web_GetWithParaHeader(url string, header map[string]string, para map[string]string) (ret []byte, err error) { req, err := http.NewRequest("GET", url, nil) if err != nil { return nil, err } for i, n := range header { req.Header.Add(i, n) } q := req.URL.Query() for i, n := range para { q.Add(i, n) } req.URL.RawQuery = q.Encode() client := &http.Client{} resp, err := client.Do(req) if err != nil { fmt.Println(err.Error()) return nil, err } defer resp.Body.Close() ret, _ = io.ReadAll(resp.Body) return ret, nil } // 发送邮件 func MailTo(From, To, Subject, Content string, ServerUrl string, ServerPort int, ServerMailBox, ServerMailPass string) error { msg := mailer.NewMessage() msg.SetHeader("From", From) msg.SetHeader("To", To) // 5. 设置邮件标题 msg.SetHeader("Subject", Subject) // 第一个参数是类型,第二个参数是内容 // 如果是 html,第一个参数则是 `text/html` 如果是文本则是"text/plain" msg.SetBody("text/html", Content) dialer := mailer.NewDialer(ServerUrl, ServerPort, ServerMailBox, ServerMailPass) dialer.TLSConfig = &tls.Config{InsecureSkipVerify: true} return dialer.DialAndSend(msg) }