Hello,
I've been trying to use the WebSockets library to connect
to the coinbase feed. The library seems to be doing something
behind the scenes that I'm not expecting.
Here is my code:
{-#
LANGUAGE ViewPatterns #-}
{-# LANGUAGE OverloadedStrings #-}
import
Data.Text
import Data.Text.Encoding (decodeUtf8)
import Network.WebSockets
import qualified Data.ByteString.Lazy as LBS
main
:: IO ()
main = runClient "ws-feed.exchange.coinbase.com"
8080 "/" handleConnection
handleConnection connection = do
send connection initSub
let loop = do
priceMsg <- receiveDataMessage connection
print priceMsg
loop
initSub
:: Message
initSub = DataMessage $ Text "{\"type\":\"subscribe\",
\"product_id\":\"BTC-USD\"}"
When I run this, I get a print out showing a malformed
response exception with a Moved permanently message. Now, it
also shows the location that I was trying to connect to, which
is: "
https://ws-feed.exchange.coinbase.com/".
This isn't right, because the websocket feed uses the
wss:// protocol rather than
https://. i've tried changing the
url to be "
wss://ws-feed.exchange.coinbase.com/",
but when I try that, dns resolution fails. If I had to guess,
I could imagine that it tries to look for "
https://wss://ws-feed.exchange.coinbase.com",
which would obviously not work. I'm wondering if there is a
way within the library to change the protocol that client
uses. If there is, it doesn't seem to be documented.
Any insights as to what's going on here would be incredibly
helpful.
Thanks,
Noah