小编zai*_*ang的帖子

在go中,如何检查写入http.ResponseWriter的http响应?

可能有一些显而易见的事情我不知道但是我正在尝试调试我的go服务器写的HTTP响应.

我看到有httputil.DumpResponse可用,但它需要一个http.Response对象,我可用的是http.ResponseWriter

有没有办法从http.ResponseWriter中提取http.Response,这样我可以检查对控制台或日志的响应内容?

语境:

我正在使用https://github.com/RangelReale/osin编写简单的服务器端身份验证,这是默认示例,但无法理解前端的原因(使用http://ember-simple-auth.com)将失败的身份验证(密码错误)解释为成功.

这是片段:

r = mux.NewRouter()
r.HandleFunc("/token", func (w http.ResponseWriter, r *http.Request) {

    fmt.Printf("r.HandleFunc /token\n")

    resp := server.NewResponse()
    defer resp.Close()

    r.ParseForm()

    grantType := r.FormValue("grant_type")
    username := r.FormValue("username")
    password := r.FormValue("password")
    fmt.Printf("/token : grantType=%s  username=%s  password=%s\n", grantType, username, password)

    if ar := server.HandleAccessRequest(resp, r); ar != nil {
        if username == "user" && password == "correct-password" {
            ar.Authorized = true
        } else {
            ar.Authorized = false
        }
        server.FinishAccessRequest(resp, r, ar)
    }

    osin.OutputJSON(resp, …
Run Code Online (Sandbox Code Playgroud)

http go

7
推荐指数
1
解决办法
3916
查看次数

Go - 在http.HandleFunc中记录对传入HTTP请求的响应

这是一个后续问题,如何检查写入http.ResponseWriter的http响应?因为解决方案需要伪造一个请求,这对于单元测试很有用,但对于实时服务器则不行.

我想转储我的Web服务返回的HTTP响应,以响应它从用户收到的日志文件(或控制台)的请求.输出应该告诉我标题是什么和JSON有效负载.

怎么去那个?

如果有一个httputil.DumpResponse等效,它将http.ResponseWriter作为参数而不是http.Response,那将是完美的,但目前我只能从http.ResponseWriter访问Header

r = mux.NewRouter()
r.HandleFunc("/path", func (w http.ResponseWriter, r *http.Request) {

    fmt.Printf("r.HandleFunc /path\n")

    resp := server.NewResponse()
    defer resp.Close()

    r.ParseForm()

    // Server does some work here
    // ...

    // Insert debug code here, something like
    //
    // dump = http.DumpResponseFromWriter(w)
    // fmt.Printf("%s\n", dump)
});
http.Handle("/path", r)
Run Code Online (Sandbox Code Playgroud)

http go

4
推荐指数
2
解决办法
3494
查看次数

标签 统计

go ×2

http ×2