http.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. package util
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "fmt"
  6. "io/ioutil"
  7. "net/http"
  8. )
  9. // get请求
  10. func HTTPGet(uri string) ([]byte, error) {
  11. response, err := http.Get(uri)
  12. if err != nil {
  13. return nil, err
  14. }
  15. defer response.Body.Close()
  16. if response.StatusCode != http.StatusOK {
  17. return nil, fmt.Errorf("http get error : uri=%v , statusCode=%v", uri, response.StatusCode)
  18. }
  19. return ioutil.ReadAll(response.Body)
  20. }
  21. // post请求
  22. func HTTPPost(uri string, data string, contenttype string) ([]byte, error) {
  23. body := bytes.NewBuffer([]byte(data))
  24. response, err := http.Post(uri, contenttype, body)
  25. if err != nil {
  26. return nil, err
  27. }
  28. defer response.Body.Close()
  29. if response.StatusCode != http.StatusOK {
  30. return nil, fmt.Errorf("http get error : uri=%v , statusCode=%v", uri, response.StatusCode)
  31. }
  32. return ioutil.ReadAll(response.Body)
  33. }
  34. // getwithheader
  35. func HTTPGetWithHeaders(uri string, headers map[string]string, params map[string]string) ([]byte, error) {
  36. // 创建一个请求对象
  37. req, err := http.NewRequest("GET", uri, nil)
  38. if err != nil {
  39. return nil, err
  40. }
  41. // 添加请求头
  42. for key, value := range headers {
  43. req.Header.Set(key, value)
  44. }
  45. // 添加请求参数
  46. query := req.URL.Query()
  47. for key, value := range params {
  48. query.Add(key, value)
  49. }
  50. req.URL.RawQuery = query.Encode()
  51. // 发送请求
  52. client := http.DefaultClient
  53. response, err := client.Do(req)
  54. if err != nil {
  55. return nil, err
  56. }
  57. defer response.Body.Close()
  58. // 读取响应内容
  59. if response.StatusCode != http.StatusOK {
  60. return nil, fmt.Errorf("http get error : uri=%v , statusCode=%v", uri, response.StatusCode)
  61. }
  62. return ioutil.ReadAll(response.Body)
  63. }
  64. // httppost post json
  65. // PostJSONWithToken post json 数据请求,并附带 access_token 请求头
  66. func PostJSON(uri string, obj interface{}, ctype string, accessToken string) ([]byte, error) {
  67. // 将对象转换为 JSON 格式的数据
  68. jsonData, err := json.Marshal(obj)
  69. fmt.Println(string(jsonData))
  70. if err != nil {
  71. return nil, err
  72. }
  73. // 替换特殊字符的 Unicode 编码
  74. jsonData = bytes.Replace(jsonData, []byte("\\u003c"), []byte("<"), -1)
  75. jsonData = bytes.Replace(jsonData, []byte("\\u003e"), []byte(">"), -1)
  76. jsonData = bytes.Replace(jsonData, []byte("\\u0026"), []byte("&"), -1)
  77. // 创建一个字节缓冲区并写入 JSON 数据
  78. body := bytes.NewBuffer(jsonData)
  79. // 创建一个 HTTP POST 请求
  80. req, err := http.NewRequest("POST", uri, body)
  81. if err != nil {
  82. fmt.Println("创建请求失败")
  83. return nil, err
  84. }
  85. // 设置请求头
  86. req.Header.Set("Content-Type", ctype)
  87. req.Header.Set("access-token", accessToken)
  88. // 使用默认的 HTTP 客户端执行请求
  89. client := &http.Client{}
  90. response, err := client.Do(req)
  91. if err != nil {
  92. fmt.Println("发送请求失败")
  93. return nil, err
  94. }
  95. defer response.Body.Close()
  96. // 检查响应状态码
  97. if response.StatusCode != http.StatusOK {
  98. return nil, fmt.Errorf("http get error: uri=%v, statusCode=%v", uri, response.StatusCode)
  99. }
  100. return ioutil.ReadAll(response.Body)
  101. }