http.go 995 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package request
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "net/http"
  6. "net/url"
  7. )
  8. func HttpRequest(
  9. urlStr string,
  10. method string,
  11. headers map[string]string,
  12. params map[string]string,
  13. data any) (*http.Response, error) {
  14. // 创建URL
  15. u, err := url.Parse(urlStr)
  16. if err != nil {
  17. return nil, err
  18. }
  19. // 添加查询参数
  20. query := u.Query()
  21. for k, v := range params {
  22. query.Set(k, v)
  23. }
  24. u.RawQuery = query.Encode()
  25. // 将数据编码为JSON
  26. buf := new(bytes.Buffer)
  27. if data != nil {
  28. b, err := json.Marshal(data)
  29. if err != nil {
  30. return nil, err
  31. }
  32. buf = bytes.NewBuffer(b)
  33. }
  34. // 创建请求
  35. req, err := http.NewRequest(method, u.String(), buf)
  36. if err != nil {
  37. return nil, err
  38. }
  39. for k, v := range headers {
  40. req.Header.Set(k, v)
  41. }
  42. if data != nil {
  43. req.Header.Set("Content-Type", "application/json")
  44. }
  45. // 发送请求
  46. resp, err := http.DefaultClient.Do(req)
  47. if err != nil {
  48. return nil, err
  49. }
  50. // 返回响应,让调用者处理
  51. return resp, nil
  52. }