Dmitry Telenkov vor 1 Tag
Ursprung
Commit
6ea0dc40f5
1 geänderte Dateien mit 72 neuen und 0 gelöschten Zeilen
  1. 72 0
      go/stepik/4/net_http.go

+ 72 - 0
go/stepik/4/net_http.go

@@ -127,3 +127,75 @@ func queryExample() {
 	// ...
 
 }
+
+// http.NewRequest()
+
+// Todo - структура для представления объекта Todo
+type Todo struct {
+	UserID   int    `json:"userId"`
+	ID       int    `json:"id"`
+	Title    string `json:"title"`
+	Complete bool   `json:"completed"`
+}
+
+func newRequestExample() {
+	todo := Todo{
+		UserID:   1,
+		ID:       2,
+		Title:    "наш title",
+		Complete: true,
+	}
+
+	// Кодируем структуру Todo в формат JSON
+	jsonReq, err := json.Marshal(todo)
+	if err != nil {
+		log.Println(err)
+		return
+	}
+
+	// URL сервера
+	baseURL := "https://jsonplaceholder.typicode.com/posts/1"
+
+	// Создаем новый HTTP-запрос с методом POST
+	req, err := http.NewRequest("POST", baseURL, bytes.NewBuffer(jsonReq))
+	if err != nil {
+		log.Println("Ошибка при создании запроса:", err)
+		return
+	}
+
+	// Устанавливаем заголовки запроса
+	req.Header.Set("Content-Type", "application/json; charset=UTF-8")
+
+	// Отправляем запрос
+	client := &http.Client{}        // Создаем http клиент
+	response, err := client.Do(req) // передаем выше подготовленный запрос на отправку
+	if err != nil {
+		log.Println("Ошибка при выполнении запроса: ", err)
+		return
+	}
+
+	defer response.Body.Close() // не забываем закрыть тело
+
+	// Читаем и конвертируем тело ответа в байты
+	bodyBytes, err := io.ReadAll(response.Body)
+	if err != nil {
+		log.Println(err)
+	}
+
+	// Конвертируем тело ответа в строку и выводим
+	bodyString := string(bodyBytes)
+	fmt.Printf("API ответ в форме строки: %s\n", bodyString)
+
+	// Конвертируем тело ответа в Todo struct
+	var todoStruct Todo
+	err = json.Unmarshl(bodyBytes, &todoStruct)
+	if err != nil {
+		log.Println(err)
+	}
+
+	// Выводим структуру
+	fmt.Printf("API ответ в форме struct:\n%+v\n", todoStruct)
+
+	// Вывод статуса ответа (если 200 - то успешный)
+	fmt.Println("Статус ответа:", response.Status)
+}