2013-08-04 19 views
1

我試圖創建一個WebSocket客戶端來連接到現有服務器(mtgox api)。如何在連接到Haskell中的websocket時添加標題

作爲一個出發點,找出連接的WebSockets,我發現這個示例代碼https://github.com/jaspervdj/websockets/blob/master/example/client.hs

的問題是,Mtgox需要頭要當它連接一起發送,我只是不知道如何發送他們。

更新:爲了解決這個問題,我創建了一個簡單的websocket服務器。當我通過一個JavaScript的WebSocket連接到它從我的Chrome的JavaScript控制檯,我看到下面的標題:

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發送的相同頭文件,因爲這是有效的。

回答

0

而不是使用connect我用connectWith,這使得「起源」頭被設置的。雖然我看不到如何添加任何其他標題,但這是MtGox需要的標題。只要我提供一個來源,並使用某種基於http的網址,它就可以成功連接。

WS.connectWith "websocket.mtgox.com" 80 "/mtgox" (Just "http://anything") Nothing app 

似乎大多數情況下不需要添加任何進一步的頭文件,並且可能這就是爲什麼沒有提供機制的原因。但是,通過查看​​,可以通過複製代碼connectWithconnectWithSocket來更改添加到Request對象的標頭。

0

根據下面的答案是不可能的,除了WebSocket的協議報頭: HTTP headers in Websockets client API

+0

這個問題是關於使用JavaScript WebSockets發送自定義標題。當您使用JavaScript客戶端時,會自動添加一些標準標頭,而MtGox api則需要這些標頭。 –