net_http.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. package main
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "fmt"
  6. "io"
  7. "log"
  8. "net/http"
  9. "net/url"
  10. )
  11. // User - структура для представления объекта пользователя
  12. type User struct {
  13. Name string `json:"name"`
  14. ID uint32 `json:"id"`
  15. }
  16. type Output struct {
  17. JSON struct {
  18. Name string `json:"name"`
  19. ID uint32 `json:"id"`
  20. } `json:"json"`
  21. URL string `json:"usr"`
  22. }
  23. func main() {
  24. // foo1()
  25. // postFormExample()
  26. queryExample()
  27. }
  28. func foo1() {
  29. // Создаем экземпляр структуры User
  30. var u = User{
  31. Name: "Alex",
  32. ID: 1,
  33. }
  34. // Кодируем структуру User в JSON (байтовый срез)
  35. bytesRepresentation, err := json.Marshal(u)
  36. if err != nil {
  37. log.Fatalln(err)
  38. }
  39. // Отправляем POST-запрос на сервер с JSON-телом
  40. resp, err := http.Post("https://httpbin.org/post", "application/json", bytes.NewBuffer(bytesRepresentation))
  41. if err != nil {
  42. log.Fatalln(err)
  43. }
  44. // Читаем и конвертируем тело ответа в байты
  45. bytesResp, err := io.ReadAll(resp.Body)
  46. if err != nil {
  47. log.Println(err)
  48. return
  49. }
  50. // Выводим содержимое тела ответа
  51. // fmt.Println(string(bytesResp))
  52. // Создаем экземпляр ответа сервера
  53. var out Output
  54. // Декодируем данные в формате JSON и заполняем структуру
  55. err = json.Unmarshal(bytesResp, &out)
  56. if err != nil {
  57. log.Println(err)
  58. return
  59. }
  60. fmt.Printf("%+v\n", out)
  61. fmt.Println(out.URL)
  62. /*
  63. var st string
  64. json.Unmarshal(bytesRepresentation, &st)
  65. fmt.Println(st)
  66. */
  67. }
  68. // Отправка данных в виде формы
  69. func postFormExample() {
  70. formData := url.Values{
  71. "name": {"hello"},
  72. "surename": {"golang post form"},
  73. }
  74. resp, err := http.PostForm("https://httpbin.org/post", formData)
  75. if err != nil {
  76. log.Fatalln(err)
  77. }
  78. var result map[string]interface{}
  79. json.NewDecoder(resp.Body).Decode(&result)
  80. log.Println(result["form"])
  81. fmt.Println("OK")
  82. }
  83. func queryExample() {
  84. // Создаем URL с параметрами
  85. baseURL := "https://example.com/api/resource"
  86. params := url.Values{}
  87. params.Add("param1", "value1")
  88. params.Add("param2", "value2")
  89. fullURL := baseURL + "?" + params.Encode()
  90. fmt.Println(fullURL)
  91. // Отправляем GET-запрос
  92. response, err := http.Get(fullURL)
  93. if err != nil {
  94. fmt.Println("Ошибка при отправлке GET-запроса:", err)
  95. return
  96. }
  97. defer response.Body.Close()
  98. // Чтение ответа
  99. // ...
  100. // Обработка ответа
  101. // ...
  102. }