Веб-сервера: Напишите программу 3

Сообщения
1,547
Реакции
271
Веб-сайт
tehadm.ru
Напиши веб сервер (порт :3333) - счетчик который будет обрабатывать GET (/count) и POST (/count) запросы:

GET: возвращает счетчик
POST: увеличивает ваш счетчик на значение (с ключом "count") которое вы получаете из формы, но если пришло НЕ число то нужно ответить клиенту: "это не число" со статусом http.StatusBadRequest (400).

C-like:
package main
// некоторые импорты нужны для проверки
import (
    "fmt"
    "io"
    "log"
    "net/http"
    "net/url"
    "os"
    "time"
    // "strconv" // вдруг понадобиться вам ;)
)

func main(){
  // порт :3333
}
 
C-like:
package main
// некоторые импорты нужны для проверки
import (
    "fmt"
    "io"
    "log"
    "net/http"
    "net/url"
    "os"
    "time"
    "strconv"
)



var counter = 0

func main() {
    http.HandleFunc("/count", countHandler)
    server := http.Server{Addr: ":3333"}
    err := server.ListenAndServe()
    if err != nil {
        fmt.Println(err)
    }
}

func countHandler(w http.ResponseWriter, r *http.Request) {
    switch r.Method {
    case http.MethodGet:
        w.Write([]byte(strconv.Itoa(counter)))
    case http.MethodPost:
        r.ParseForm()
        numberString := r.Form.Get("count")
        number, err := strconv.Atoi(numberString)
        if err != nil {
            w.WriteHeader(http.StatusBadRequest)

            w.Write([]byte("это не число"))
            return
        }
        counter += number
    }
}
 
C-like:
package main

import (
    "fmt"
    "io"
    "log"
    "net/http"
    "net/url"
    "os"
    "time"
    "strconv"
)

var globalCount int

func main () {
    http.HandleFunc("/", handleRequest)

    err := http.ListenAndServe(":3333", nil)

    if err != nil {
        log.Println(err)
    }
}

func handleRequest(w http.ResponseWriter, r *http.Request) {
    switch r.Method {
    case http.MethodGet:
        handleGet(w, r)
    case http.MethodPost:
        handlePost(w, r)
    }
}

func handleGet(w http.ResponseWriter, r *http.Request) {
    fmt.Println(globalCount)
}

func handlePost (w http.ResponseWriter, r *http.Request) {

    intCount, err := strconv.Atoi(r.FormValue("count"))
    if err != nil {
        w.WriteHeader(http.StatusBadRequest)
        w.Write([]byte("это не число"))
    } else {
        globalCount += intCount
    }

}
 
Назад
Сверху Снизу