|
|
@@ -0,0 +1,92 @@
|
|
|
+package main
|
|
|
+
|
|
|
+import (
|
|
|
+ "fmt"
|
|
|
+ "io"
|
|
|
+ "log"
|
|
|
+ "net/http"
|
|
|
+)
|
|
|
+
|
|
|
+// Обработчик HTTP-запросов
|
|
|
+/*
|
|
|
+func handler(w http.ResponseWriter, r *http.Request) {
|
|
|
+ fmt.Println("RawQuery: ", r.URL.String())
|
|
|
+ fmt.Println("Name: ", r.URL.Query().Get("name"))
|
|
|
+ fmt.Println("IsExist: ", r.URL.Query().Has("name"))
|
|
|
+ w.Write([]byte("Привет, Stepik!"))
|
|
|
+}
|
|
|
+*/
|
|
|
+
|
|
|
+func main() {
|
|
|
+
|
|
|
+ // server2()
|
|
|
+ server3()
|
|
|
+ /*
|
|
|
+ // Регистрируем обработчик для пути "/"
|
|
|
+ http.HandleFunc("/", handler)
|
|
|
+
|
|
|
+ // Запускаем веб-сервер на порту 8080
|
|
|
+ err := http.ListenAndServe(":8080", nil)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("Ошибка запуска сервера:", err)
|
|
|
+ }
|
|
|
+ */
|
|
|
+}
|
|
|
+
|
|
|
+// Веб сервер по пути /body принимает запрос и проверяет что он
|
|
|
+// является POST методом. Далее читаем тело через уже знакомую
|
|
|
+// функцию io.ReadAll()
|
|
|
+
|
|
|
+func handlerBody(w http.ResponseWriter, r *http.Request) {
|
|
|
+ // Проверяем что метод POST
|
|
|
+ if r.Method == "POST" {
|
|
|
+ // читаем входящее тело запроса
|
|
|
+ bytesBody, err := io.ReadAll(r.Body)
|
|
|
+ if err != nil {
|
|
|
+ log.Println(err)
|
|
|
+ w.Write([]byte("Плохое тело запроса"))
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // печатем тело запроса как строку
|
|
|
+ fmt.Println(string(bytesBody))
|
|
|
+ // отвечаем клиенту, что все хорошо
|
|
|
+ w.Write([]byte("OK!"))
|
|
|
+ return
|
|
|
+ }
|
|
|
+ w.Write([]byte("Разрешен только метод POST!"))
|
|
|
+}
|
|
|
+
|
|
|
+func server2() {
|
|
|
+ // Регистрируем обработчик для пути "/body"
|
|
|
+ http.HandleFunc("/body", handlerBody)
|
|
|
+ // Запускаем веи-сервер на порту 8080
|
|
|
+ err := http.ListenAndServe(":8080", nil)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("Ошибка запуска сервера:", err)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// Коды ответа
|
|
|
+
|
|
|
+func handlerOK1(w http.ResponseWriter, r *http.Request) {
|
|
|
+ w.Write([]byte("Привет"))
|
|
|
+ w.WriteHeader(200)
|
|
|
+}
|
|
|
+
|
|
|
+func handlerOK2(w http.ResponseWriter, r *http.Request) {
|
|
|
+ if r.Method == "PUT" {
|
|
|
+ w.WriteHeader(http.StatusMethodNotAllowed) // return 405
|
|
|
+ return
|
|
|
+ }
|
|
|
+ w.Write([]byte("Привет!"))
|
|
|
+ w.WriteHeader(http.StatusOK)
|
|
|
+}
|
|
|
+
|
|
|
+func server3() {
|
|
|
+ http.HandleFunc("/", handlerOK1)
|
|
|
+ http.HandleFunc("2", handlerOK2)
|
|
|
+ err := http.ListenAndServe(":3000", nil)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("Ошибка запуска сервера:", err)
|
|
|
+ }
|
|
|
+}
|