xhttp.go 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. package xnet
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "io/ioutil"
  6. "log"
  7. "net/http"
  8. "net/http/cookiejar"
  9. "net/url"
  10. "time"
  11. )
  12. func PostJson(srcUrl string, params, headers map[string]string, data map[string]interface{}, cookies []*http.Cookie) (string, error) {
  13. var content string
  14. //解析原生的url
  15. parseUrl, _ := url.Parse(srcUrl)
  16. //new个cookiejar罐子
  17. jar, err := cookiejar.New(nil)
  18. if err != nil {
  19. log.Printf("cookiejar New error : %v\n", err)
  20. return content, err
  21. }
  22. //把传入的cookies装入罐
  23. jar.SetCookies(parseUrl, cookies)
  24. //处理jsondata
  25. byteData, err := json.Marshal(data)
  26. if err != nil {
  27. log.Printf("Marshal data error : %v", err)
  28. return content, err
  29. }
  30. //初始化请求,加入15秒timeout
  31. client := &http.Client{Jar: jar, Timeout: 15 * time.Second}
  32. req, _ := http.NewRequest("POST", srcUrl, bytes.NewReader(byteData))
  33. //处理query参数
  34. q := req.URL.Query()
  35. for k, v := range params {
  36. q.Add(k, v)
  37. }
  38. req.URL.RawQuery = q.Encode()
  39. //请求加入头部
  40. for k, v := range headers {
  41. req.Header.Add(k, v)
  42. }
  43. //发出请求
  44. resp, err := client.Do(req)
  45. if err != nil {
  46. log.Printf("client.Do error : %v\n", err)
  47. return content, err
  48. }
  49. //读取返回页面数据
  50. body, _ := ioutil.ReadAll(resp.Body)
  51. defer resp.Body.Close()
  52. content = string(body)
  53. return content, nil
  54. }
  55. // @title GetX
  56. // @description 带参数,头部,cookie的get请求封装
  57. // @param
  58. // @return
  59. func GetX(srcUrl string, params, headers map[string]string, cookies []*http.Cookie) (string, error) {
  60. var content string
  61. //解析原生的url
  62. parseUrl, _ := url.Parse(srcUrl)
  63. //new个cookiejar罐子
  64. jar, err := cookiejar.New(nil)
  65. if err != nil {
  66. log.Printf("cookiejar New error : %v\n", err)
  67. return content, err
  68. }
  69. //把传入的cookies装入罐
  70. jar.SetCookies(parseUrl, cookies)
  71. //初始化请求,加入15秒timeout
  72. client := &http.Client{Jar: jar, Timeout: 15 * time.Second}
  73. req, _ := http.NewRequest("GET", srcUrl, nil)
  74. //处理query参数
  75. q := req.URL.Query()
  76. for k, v := range params {
  77. q.Add(k, v)
  78. }
  79. req.URL.RawQuery = q.Encode()
  80. //请求加入头部
  81. for k, v := range headers {
  82. req.Header.Add(k, v)
  83. }
  84. //发出请求
  85. resp, err := client.Do(req)
  86. if err != nil {
  87. log.Printf("client.Do error : %v\n", err)
  88. return content, err
  89. }
  90. //读取返回页面数据
  91. body, _ := ioutil.ReadAll(resp.Body)
  92. defer resp.Body.Close()
  93. content = string(body)
  94. return content, nil
  95. }
  96. // GetContentWithCookies 带cookie获取源地址的内容
  97. func GetContentWithCookies(srcUrl string, cookies []*http.Cookie) (string, error) {
  98. var content string
  99. //new个cookiejar罐子
  100. jar, err := cookiejar.New(nil)
  101. if err != nil {
  102. log.Printf("cookiejar New error : %v\n", err)
  103. return content, err
  104. }
  105. //原生的url
  106. parseUrl, _ := url.Parse(srcUrl)
  107. //把传入的cookies装入罐
  108. jar.SetCookies(parseUrl, cookies)
  109. //初始化请求
  110. client := &http.Client{Jar: jar, Timeout: 15 * time.Second}
  111. req, _ := http.NewRequest("GET", srcUrl, nil)
  112. //请求加入头部
  113. req.Header.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36")
  114. //发出请求
  115. resp, err := client.Do(req)
  116. if err != nil {
  117. log.Printf("client.Do error : %v\n", err)
  118. return content, err
  119. }
  120. //读取返回页面数据
  121. body, _ := ioutil.ReadAll(resp.Body)
  122. defer resp.Body.Close()
  123. content = string(body)
  124. return content, nil
  125. }