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) } }