You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

111 lines
2.4 KiB

  1. package utils
  2. import (
  3. "LEIT_PM/conf"
  4. "bytes"
  5. "io"
  6. "io/ioutil"
  7. "mime/multipart"
  8. "net/http"
  9. "net/url"
  10. "os"
  11. )
  12. func GetRequest(u string, headers map[string]string) (body []byte, err error) {
  13. proxy := func(_ *http.Request) (*url.URL, error) {
  14. return url.Parse(conf.DbConfig.Proxy)
  15. }
  16. transport := &http.Transport{Proxy: proxy}
  17. client := &http.Client{Transport: transport}
  18. req, err := http.NewRequest(http.MethodGet, u, nil)
  19. if err != nil {
  20. return nil, err
  21. }
  22. for key, value := range headers {
  23. req.Header.Add(key, value)
  24. }
  25. resp, err := client.Do(req)
  26. if err != nil {
  27. return nil, err
  28. }
  29. defer resp.Body.Close()
  30. body, err = ioutil.ReadAll(resp.Body)
  31. if err != nil {
  32. return nil, err
  33. }
  34. return body, nil
  35. }
  36. func PostFormDataWithSingleFile(u string, filepath string, filename string, headers map[string]string) (body []byte, err error){
  37. proxy := func(_ *http.Request) (*url.URL, error) {
  38. return url.Parse(conf.DbConfig.Proxy)
  39. }
  40. transport := &http.Transport{Proxy: proxy}
  41. client := &http.Client{Transport: transport}
  42. bodyBuf := &bytes.Buffer{}
  43. bodyWrite := multipart.NewWriter(bodyBuf)
  44. file, err := os.Open(filepath)
  45. if err != nil {
  46. return nil, err
  47. }
  48. defer file.Close()
  49. // file 为key
  50. fileWrite, err := bodyWrite.CreateFormFile("file", filename)
  51. if err != nil {
  52. return nil, err
  53. }
  54. _, err = io.Copy(fileWrite, file)
  55. if err != nil {
  56. return nil, err
  57. }
  58. err = bodyWrite.Close() //要关闭,会将w.w.boundary刷写到w.writer中
  59. if err != nil {
  60. return nil, err
  61. }
  62. // 创建请求
  63. contentType := bodyWrite.FormDataContentType()
  64. req, err := http.NewRequest(http.MethodPost, u, bodyBuf)
  65. if err != nil {
  66. return nil, err
  67. }
  68. // 设置头
  69. req.Header.Set("Content-Type", contentType)
  70. for key, value := range headers {
  71. req.Header.Add(key, value)
  72. }
  73. resp, err := client.Do(req)
  74. if err != nil {
  75. return nil, err
  76. }
  77. defer resp.Body.Close()
  78. body, err = ioutil.ReadAll(resp.Body)
  79. if err != nil {
  80. return nil, err
  81. }
  82. return body, nil
  83. }
  84. func Post(url string, data []byte) (body []byte, err error){
  85. client := http.Client{}
  86. // 创建请求
  87. reader := bytes.NewReader(data)
  88. req, err := http.NewRequest(http.MethodPost, url, reader)
  89. if err != nil {
  90. return nil, err
  91. }
  92. // 设置头
  93. req.Header.Set("Content-Type", "application/json;charset=UTF-8")
  94. resp, err := client.Do(req)
  95. if err != nil {
  96. return nil, err
  97. }
  98. defer resp.Body.Close()
  99. body, err = ioutil.ReadAll(resp.Body)
  100. if err != nil {
  101. return nil, err
  102. }
  103. return body, nil
  104. }