第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

使用 httptest 和 curl 的不同內(nèi)容類型

使用 httptest 和 curl 的不同內(nèi)容類型

Go
慕姐8265434 2023-06-05 19:26:30
我正在嘗試這個(gè) Go 代碼package mainimport (    "github.com/gorilla/mux"    "io"    "log"    "net/http")func HealthCheckHandler(w http.ResponseWriter, r *http.Request) {    w.WriteHeader(http.StatusOK)    w.Header().Set("Content-Type", "application/json")    io.WriteString(w, `{"alive": true}`)}func main() {    router := mux.NewRouter()    router.HandleFunc("/health", HealthCheckHandler).Methods("GET")    log.Printf("running server ...")    log.Fatal(http.ListenAndServe(":8000", router))}通過這個(gè)測試package mainimport (    "net/http"    "net/http/httptest"    "testing")func TestHealthCheckHandler(t *testing.T) {    req, err := http.NewRequest("GET", "/health", nil)    if err != nil {        t.Fatal(err)    }    rr := httptest.NewRecorder()    handler := http.HandlerFunc(HealthCheckHandler)    handler.ServeHTTP(rr, req)    if status := rr.Code; status != http.StatusOK {        t.Errorf("handler returned wrong status code: got %v want %v",            status, http.StatusOK)    }    t.Logf("%v", rr.Header())    if ctype := rr.Header().Get("Content-Type"); ctype != "application/json" {        t.Errorf("content type header does not match: got %v want %v",            ctype, "application/json")    }}當(dāng)我運(yùn)行測試時(shí),一切正常go test -v=== RUN   TestHealthCheckHandler--- PASS: TestHealthCheckHandler (0.00s)    handlers_test.go:24: map[Content-Type:[application/json]]PASSok          0.012s是,但是當(dāng)我運(yùn)行該服務(wù)并用 curl 調(diào)用它時(shí)Content-Type,是application/jsonContent-Typetext/plaincurl -v localhost:8000/health*   Trying ::1...* Connected to localhost (::1) port 8000 (#0)> GET /health HTTP/1.1> Host: localhost:8000> User-Agent: curl/7.43.0> Accept: */*>< HTTP/1.1 200 OK< Date: Thu, 14 Feb 2019 01:37:15 GMT< Content-Length: 15< Content-Type: text/plain; charset=utf-8<* Connection #0 to host localhost left intact為什么行為不同于測試和執(zhí)行?
查看完整描述

2 回答

?
MMMHUHU

TA貢獻(xiàn)1834條經(jīng)驗(yàn) 獲得超8個(gè)贊

問題是您在標(biāo)題之前發(fā)送了身體。這在任何語言中都行不通——這是 HTTP 的事實(shí),而不是 Go 的事實(shí)。


它沒有被您的測試捕獲的原因是您的測試實(shí)際上是在濫用ResponseRecorder;您在地圖中設(shè)置字段,然后直接從該地圖讀取字段。測試應(yīng)該只檢查ResponseRecorder.Result,它旨在為您提供客戶端實(shí)際收到的結(jié)果,包括在發(fā)送正文時(shí)鎖定標(biāo)頭:


if ctype := rr.Response().Header.Get("Content-Type"); ctype != "application/json" {

    t.Errorf("content type header does not match: got %v want %v",

        ctype, "application/json")

}


查看完整回答
反對 回復(fù) 2023-06-05
?
婷婷同學(xué)_

TA貢獻(xiàn)1844條經(jīng)驗(yàn) 獲得超8個(gè)贊

只需將您的功能更改為:


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


    // this will cause a duplicate status header to be written

    // w.WriteHeader(http.StatusOK)


    w.Header().Set("Content-Type", "application/json")


    io.WriteString(w, `{"alive": true}`)

}


查看完整回答
反對 回復(fù) 2023-06-05
  • 2 回答
  • 0 關(guān)注
  • 157 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號