在net.Conn之上创建一个http响应编写器

时间:2017-10-12 01:07:00

标签: http go

在以下代码中:

l, err := net.Listen("tcp", ":"+port)
assert(err)
c, err := l.Accept()
assert(err)
cert, err := tls.LoadX509KeyPair(TLS_CERT, TLS_PKEY)
assert(err)
TLSconfig := &tls.Config{
    Certificates: []tls.Certificate{cert},
    ClientAuth:   tls.VerifyClientCertIfGiven,
    ServerName:   DOMAIN_NAME,
}
tlsConn := tls.Server(c, TLSconfig)
tlsConn.Handshake()
c = net.Conn(tlsConn)

我想创建一个http响应编写器,例如:

w := CreateResponseWriter(c)  //<-- how to do this?
w.Header().Set(...)
if !Authorized(c.RemoteAddr()) {
    http.Error(w, "Unauthorized", http.StatusUnauthorized)
    return
}
data, _ := os.Open("/path/to/content")
defer data.Close()
io.Copy(w, data)

目的是我在Golang中编写一个http代理,我需要检查远程连接是否被授权,如果没有,我将显示登录页面。感谢。

1 个答案:

答案 0 :(得分:0)

http.ResponseWriter是一个界面。因此,要创建自己的数据类型,只需创建满足接口的任何数据类型。

但是,您真正想要做的就是将HTTP服务器绑定到现有连接。为此,您可以使用ServeServeTLS方法。