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

标签 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代理,我需要检查远程连接是否被授权,如果没有,我会显示登录页面。谢谢。

最佳答案

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

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

关于http - 在 net.Conn 之上创建一个 http 响应编写器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46699819/

相关文章:

json - [去] : Parsing JSON

go - 如何使用 golang 中的 jsonrpc 包将嵌套映射从服务器发送到客户端?

javascript - 自定义请求 header 未随 JavaScript 获取请求一起发送

html - 使用相对链接从 https(反之亦然)链接到 http 的简短方法

json解码 key 类型

garbage-collection - 默认情况下,Go 中哪些对象是最终确定的,它有哪些陷阱?

php - PayPal IPN 沙箱返回 HTTP 302

angularjs - 通过 $http.get 从大文件中检索前几个字节

php - jqueryForm 和空上传

arrays - 如何解析下面格式的json数组