簡體   English   中英

在Haskell中連接到WebSocket時如何添加標題

[英]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

似乎幾乎沒有必要添加任何其他標頭,並且推測這就是為什么未提供任何機制的原因。 但是,查看源代碼 ,可以通過復制粘貼connectWithconnectWithSocket的代碼來更改添加到Request對象的標頭。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM