在WebSocket中获取完整的URL

时间:2016-02-25 08:33:46

标签: go

我正在使用golang samples之一来构建WebSocket服务器。根据示例,结构Client访问websocket.Conn herewebsocket.Conn使用Request方法返回*http.Request

我的想法是根据用户输入应用的子域名将用户订阅到不同的渠道。

那么订阅websocket时可以获得用户点击的完整URL吗?使用示例代码,我认为ws.Conn.Request().URL.Host会给我类似ws://channel1.lvh.me:8080/sync的内容,但我会得到路径:“/ chat”。

是否可以获取用户用于连接websocket的完整URL?提前谢谢。

2 个答案:

答案 0 :(得分:1)

检查host header以获取请求的主机:

host := c.Request().Host

从HTTP请求URI解析Request.URL字段。对于大多数请求,请求URI仅包含路径和查询。

应用程序可以从主机头重建完整的URL,并了解应用程序所服务的协议。例如,如果应用程序正在侦听HTTP请求(或使用HTTP进行握手的WS请求),则完整的URL为:

u := *c.Request().URL
u.Host = c.Request().Host
u.Scheme = "http"

答案 1 :(得分:0)

func (*Conn) Request返回*http.Request

func (ws *Conn) Request() *http.Request

检查http包中的http.Request,您会发现它具有URL *url.URL类型。这意味着您应该获得完整的网址:

ws.Request().URL.Path