我正在尝试创建一个 WebSocket 客户端以连接到现有服务器(mtgox api)。
作为一个起点,为了弄清楚连接到 WebSockets,我找到了这个示例代码https://github.com/jaspervdj/websockets/blob/master/example/client.hs
问题是 Mtgox 需要在连接时发送标头,我只是不确定如何发送它们。
更新:为了帮助解决这个问题,我也创建了一个简单的 websocket 服务器。当我从 Chrome JavaScript 控制台通过 JavaScript WebSocket 连接到它时,我看到以下标题:
requestHeaders = [("Upgrade","websocket"),("Connection","Upgrade"),
("Host","127.0.0.1:8001"),("Origin","chrome://newtab"),("Pragma","no-cache"),
("Cache-Control","no-cache"),("Sec-WebSocket-Key","yOsPEMHx9AyT9u3ssNma/Q=="),
("Sec-WebSocket-Version","13"),("Sec-WebSocket-Extensions","x-webkit-deflate-frame"),
("User-Agent","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36")]
然而,当我通过 Haskell 客户端连接时,我只看到以下标题:
requestHeaders = [("Host","127.0.0.1"),("Connection","Upgrade"),
("Upgrade","websocket"),("Sec-WebSocket-Key","X3hMDW4fAau53dbz7w4MTw=="),
("Sec-WebSocket-Version","13")]
我不知道 MtGox 实际需要哪些标头,但我的计划是只发送与 Chrome 发送的相同的标头,因为这样可以。