xhttp.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. package cmd
  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, proxyUrl 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. transport := &http.Transport{}
  72. if len(proxyUrl) > 1 {
  73. proxyProxyUrl, _ := url.Parse(proxyUrl)
  74. transport.Proxy = http.ProxyURL(proxyProxyUrl)
  75. }
  76. //初始化请求,加入15秒timeout
  77. client := &http.Client{Jar: jar, Timeout: 15 * time.Second, Transport: transport}
  78. req, _ := http.NewRequest("GET", srcUrl, nil)
  79. //处理query参数
  80. q := req.URL.Query()
  81. for k, v := range params {
  82. q.Add(k, v)
  83. }
  84. req.URL.RawQuery = q.Encode()
  85. //请求加入头部
  86. for k, v := range headers {
  87. req.Header.Add(k, v)
  88. }
  89. //发出请求
  90. resp, err := client.Do(req)
  91. if err != nil {
  92. log.Printf("client.Do error : %v\n", err)
  93. return content, err
  94. }
  95. //读取返回页面数据
  96. body, _ := ioutil.ReadAll(resp.Body)
  97. defer resp.Body.Close()
  98. content = string(body)
  99. return content, nil
  100. }
  101. // GetContentWithCookies 带cookie获取源地址的内容
  102. func GetContentWithCookies(srcUrl string, cookies []*http.Cookie) (string, error) {
  103. var content string
  104. //new个cookiejar罐子
  105. jar, err := cookiejar.New(nil)
  106. if err != nil {
  107. log.Printf("cookiejar New error : %v\n", err)
  108. return content, err
  109. }
  110. //原生的url
  111. parseUrl, _ := url.Parse(srcUrl)
  112. //把传入的cookies装入罐
  113. jar.SetCookies(parseUrl, cookies)
  114. //初始化请求
  115. client := &http.Client{Jar: jar, Timeout: 15 * time.Second}
  116. req, _ := http.NewRequest("GET", srcUrl, nil)
  117. //请求加入头部
  118. 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")
  119. //发出请求
  120. resp, err := client.Do(req)
  121. if err != nil {
  122. log.Printf("client.Do error : %v\n", err)
  123. return content, err
  124. }
  125. //读取返回页面数据
  126. body, _ := ioutil.ReadAll(resp.Body)
  127. defer resp.Body.Close()
  128. content = string(body)
  129. return content, nil
  130. }