[英]How to add headers when connecting to a websocket in Haskell
我正在嘗試創建一個WebSocket客戶端以連接到現有服務器( mtgox api )。
首先,要弄清楚連接到WebSocket的方法,我發現了以下示例代碼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發送的標頭相同的標頭,因為那樣可以。
根據以下答案,除了WebSocket-Protocol標頭外,這是不可能的: Websockets客戶端API中的HTTP標頭
代替使用的connect
我用connectWith
,這允許“起源”報頭被設置。 盡管我看不到如何添加其他標頭,但這是MtGox所需的標頭。 只要提供一個基於HTTP的url作為來源,它就可以成功連接。
WS.connectWith "websocket.mtgox.com" 80 "/mtgox" (Just "http://anything") Nothing app
似乎幾乎沒有必要添加任何其他標頭,並且推測這就是為什么未提供任何機制的原因。 但是,查看源代碼 ,可以通過復制粘貼connectWith
和connectWithSocket
的代碼來更改添加到Request對象的標頭。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.