123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- /*
- 工具:网络
- */
- 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)
- }
|