Como definir o código de status HTTP em http.ResponseWriter

101

Como defino o código de status HTTP em um http.ResponseWriter(por exemplo, 500 ou 403)?

Posso ver que as solicitações normalmente têm um código de status de 200 anexado a elas.

Nick H
fonte

Respostas:

161

Use http.ResponseWriter.WriteHeader. Da documentação:

WriteHeader envia um cabeçalho de resposta HTTP com o código de status. Se WriteHeader não for chamado explicitamente, a primeira chamada para Write acionará um WriteHeader implícito (http.StatusOK). Assim, as chamadas explícitas para WriteHeader são usadas principalmente para enviar códigos de erro.

Exemplo:

func ServeHTTP(w http.ResponseWriter, r *http.Request) {
    w.WriteHeader(http.StatusInternalServerError)
    w.Write([]byte("500 - Something bad happened!"))
}
Tim Cooper
fonte
Como você pode acessar o cabeçalho escrito no middleware anexo. res.Header (). Get ('StatusCode') dá nulo.
Kailash Yogeshwar
91

Além disso, WriteHeader(int)você pode usar o método auxiliar http.Error , por exemplo:

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

    http.Error(w, "my own error message", http.StatusForbidden)

    // or using the default message error

    http.Error(w, http.StatusText(http.StatusNotFound), http.StatusNotFound)
}

Os métodos http.Error () e http.StatusText () são seus amigos

Yandry Pozo
fonte
Não sei por que, mas só essa resposta funciona para mim, não "WriteHeader (int)", então muito obrigado!
Wishmaster
29
w.WriteHeader(http.StatusInternalServerError)
w.WriteHeader(http.StatusForbidden)

lista completa aqui

Marcel Novy
fonte
1
ele registrahttp: superfluous response.WriteHeader call
panchicore
1
Ei @panchicore, caso não tenha ficado óbvio em retrospectiva - e para a conclusão - você só pode enviar um desses cabeçalhos, o segundo foi apenas um exemplo diferente. O "supérfluo" nesse aviso apenas afirma que apenas o primeiro deve ser enviado.
Adam Jack