5

Go は初めてで、Mux を使用して HTTP POST データを受け入れます。MaxBytesReaderを使用して、クライアントがサーバーを圧倒しないようにしたいと考えています。コードによると、requestBodyLimitその制限に達したかどうかを示すブール値があります。

私の質問は次のとおりです: MaxBytesReader を使用する場合、リクエストを処理するときに実際に最大値に達したかどうかをどのように判断できますか?

これが私のコードです:

package main

import (
        "fmt"
        "log"
        "html/template"
        "net/http"

        "github.com/gorilla/mux"
)

func main() {
        r := mux.NewRouter()
        r.HandleFunc("/handle", maxBytes(PostHandler)).Methods("POST")
        http.ListenAndServe(":8080", r)
}

// Middleware to enforce the maximum post body size
func maxBytes(f http.HandlerFunc) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
            // As an example, limit post body to 10 bytes
            r.Body = http.MaxBytesReader(w, r.Body, 10)
            f(w, r)
    }
}

func PostHandler(w http.ResponseWriter, r *http.Request) {
    // How do I know if the form data has been truncated?
    book := r.FormValue("email")
    fmt.Fprintf(w, "You've requested the book: %s\n", book)
}

どうやって:

  • POST の最大制限に達した (またはアクセスできる) ことを確認します。requestBodyLimit

  • 私のコードはこの条件で分岐できますか?

4

2 に答える 2

0

読み取ったデータの長さが MaxBytesSize より大きい (または等しい) かどうかを確認することで、制限を超えたかどうかを判断できます。

maxBytesSize := 10
r.Body = http.MaxBytesReader(w, r.Body, maxBytesSize)

// check if request body is not too large
data, err := ioutil.ReadAll(r.Body)
if err != nil {
    if len(data) >= maxBytesSize {
         //exceeded
    }
    // some other error
}
于 2018-10-18T18:49:50.903 に答える