|
|
@@ -0,0 +1,129 @@
|
|
|
+package main
|
|
|
+
|
|
|
+import (
|
|
|
+ "bytes"
|
|
|
+ "encoding/json"
|
|
|
+ "fmt"
|
|
|
+ "io"
|
|
|
+ "log"
|
|
|
+ "net/http"
|
|
|
+ "net/url"
|
|
|
+)
|
|
|
+
|
|
|
+// User - структура для представления объекта пользователя
|
|
|
+type User struct {
|
|
|
+ Name string `json:"name"`
|
|
|
+ ID uint32 `json:"id"`
|
|
|
+}
|
|
|
+
|
|
|
+type Output struct {
|
|
|
+ JSON struct {
|
|
|
+ Name string `json:"name"`
|
|
|
+ ID uint32 `json:"id"`
|
|
|
+ } `json:"json"`
|
|
|
+ URL string `json:"usr"`
|
|
|
+}
|
|
|
+
|
|
|
+func main() {
|
|
|
+ // foo1()
|
|
|
+ // postFormExample()
|
|
|
+ queryExample()
|
|
|
+}
|
|
|
+
|
|
|
+func foo1() {
|
|
|
+ // Создаем экземпляр структуры User
|
|
|
+ var u = User{
|
|
|
+ Name: "Alex",
|
|
|
+ ID: 1,
|
|
|
+ }
|
|
|
+
|
|
|
+ // Кодируем структуру User в JSON (байтовый срез)
|
|
|
+ bytesRepresentation, err := json.Marshal(u)
|
|
|
+ if err != nil {
|
|
|
+ log.Fatalln(err)
|
|
|
+ }
|
|
|
+
|
|
|
+ // Отправляем POST-запрос на сервер с JSON-телом
|
|
|
+ resp, err := http.Post("https://httpbin.org/post", "application/json", bytes.NewBuffer(bytesRepresentation))
|
|
|
+ if err != nil {
|
|
|
+ log.Fatalln(err)
|
|
|
+ }
|
|
|
+
|
|
|
+ // Читаем и конвертируем тело ответа в байты
|
|
|
+ bytesResp, err := io.ReadAll(resp.Body)
|
|
|
+ if err != nil {
|
|
|
+ log.Println(err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // Выводим содержимое тела ответа
|
|
|
+ // fmt.Println(string(bytesResp))
|
|
|
+
|
|
|
+ // Создаем экземпляр ответа сервера
|
|
|
+ var out Output
|
|
|
+ // Декодируем данные в формате JSON и заполняем структуру
|
|
|
+ err = json.Unmarshal(bytesResp, &out)
|
|
|
+ if err != nil {
|
|
|
+ log.Println(err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ fmt.Printf("%+v\n", out)
|
|
|
+ fmt.Println(out.URL)
|
|
|
+
|
|
|
+ /*
|
|
|
+ var st string
|
|
|
+
|
|
|
+ json.Unmarshal(bytesRepresentation, &st)
|
|
|
+
|
|
|
+ fmt.Println(st)
|
|
|
+ */
|
|
|
+}
|
|
|
+
|
|
|
+// Отправка данных в виде формы
|
|
|
+func postFormExample() {
|
|
|
+ formData := url.Values{
|
|
|
+ "name": {"hello"},
|
|
|
+ "surename": {"golang post form"},
|
|
|
+ }
|
|
|
+
|
|
|
+ resp, err := http.PostForm("https://httpbin.org/post", formData)
|
|
|
+ if err != nil {
|
|
|
+ log.Fatalln(err)
|
|
|
+ }
|
|
|
+
|
|
|
+ var result map[string]interface{}
|
|
|
+
|
|
|
+ json.NewDecoder(resp.Body).Decode(&result)
|
|
|
+
|
|
|
+ log.Println(result["form"])
|
|
|
+
|
|
|
+ fmt.Println("OK")
|
|
|
+}
|
|
|
+
|
|
|
+func queryExample() {
|
|
|
+ // Создаем URL с параметрами
|
|
|
+ baseURL := "https://example.com/api/resource"
|
|
|
+ params := url.Values{}
|
|
|
+ params.Add("param1", "value1")
|
|
|
+ params.Add("param2", "value2")
|
|
|
+
|
|
|
+ fullURL := baseURL + "?" + params.Encode()
|
|
|
+
|
|
|
+ fmt.Println(fullURL)
|
|
|
+
|
|
|
+ // Отправляем GET-запрос
|
|
|
+ response, err := http.Get(fullURL)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("Ошибка при отправлке GET-запроса:", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ defer response.Body.Close()
|
|
|
+
|
|
|
+ // Чтение ответа
|
|
|
+ // ...
|
|
|
+
|
|
|
+ // Обработка ответа
|
|
|
+ // ...
|
|
|
+
|
|
|
+}
|