Haskell websockets库不工作

Haskell websockets库不工作,haskell,websocket,functional-programming,Haskell,Websocket,Functional Programming,我成功地使用了websockets库。我还可以通过连接到api2.poloniex.com并成功查询websocket 但是,当我尝试使用websockets连接到api2.poloniex.com时,出现以下错误: Exception: MalformedResponse (ResponseHead {responseCode = 403, responseMessage = "Forbidden", responseHeaders = [("Date","Wed, 15 Aug 2018 0

我成功地使用了
websockets
库。我还可以通过连接到api2.poloniex.com并成功查询websocket

但是,当我尝试使用
websockets
连接到api2.poloniex.com时,出现以下错误:

Exception: MalformedResponse (ResponseHead {responseCode = 403, responseMessage = "Forbidden", responseHeaders = [("Date","Wed, 15 Aug 2018 00:27:10 GMT"),("Content-Type","text/html; charset=UTF-8"),("Transfer-Encoding","chunked"),("Connection","close"),("CF-Chl-Bypass","1"),("Set-Cookie","__cfduid=de2aa54a27d656c35f2c3b90f60cc72461534292830; expires=Thu, 15-Aug-19 00:27:10 GMT; path=/; domain=.poloniex.com; HttpOnly"),("Cache-Control","max-age=2"),("Expires","Wed, 15 Aug 2018 00:27:12 GMT"),("X-Frame-Options","SAMEORIGIN"),("Server","cloudflare"),("CF-RAY","44a788b174052eb7-MIA")]}) "Wrong response status or message."
我的代码如下:

{-# LANGUAGE OverloadedStrings #-}
module Main
    ( main
    ) where

import           Control.Concurrent  (forkIO)
import           Control.Monad       (forever, unless)
import           Control.Monad.Trans (liftIO)
import           Data.Aeson
import           Data.Text           (Text)
import qualified Data.Text           as T
import qualified Data.Text.IO        as T
import           Network.Socket      (withSocketsDo)
import qualified Network.WebSockets  as WS


--------------------------------------------------------------------------------
app :: WS.ClientApp ()
app conn = do
    putStrLn "Connected!"

    -- Fork a thread that writes WS data to stdout
    _ <- forkIO $ forever $ do
        msg <- WS.receiveData conn
        liftIO $ T.putStrLn msg

    -- Read from stdin and write to WS
    let loop = do
            line <- T.getLine
            unless (T.null line) $ WS.sendTextData conn line >> loop

    loop
    WS.sendClose conn ("Bye!" :: Text)


--------------------------------------------------------------------------------
main :: IO ()
main = withSocketsDo $ WS.runClient "api2.poloniex.com" 80 ""  app
{-#语言重载字符串}
主模块
(主要
)在哪里
导入控制。并发(forkIO)
进口控制。单子(永久,除非)
进口控制单体转运(liftIO)
导入数据.Aeson
导入数据。文本(Text)
导入符合条件的数据。文本为T
将限定的Data.Text.IO作为T导入
导入网络套接字(带socketsdo)
将合格的Network.WebSockets作为WS导入
--------------------------------------------------------------------------------
应用程序::WS.ClientApp()
app conn=do
putStrLn“已连接!”
--分叉将WS数据写入标准输出的线程

_Poloniex WebSocket API似乎需要安全连接,请参见:(我从WS-endpoint URL知道这一点,它使用
wss://
而不是
WS://
WS.runClient
使用不安全的
WS://
协议而不是安全的
wss://
协议,因此它将无法连接。尝试使用wuss库: 并将主要功能重写为:

import qualified Wuss as WSS (runSecureClient)
-- ...
main :: IO ()
main = withSocketsDo $ WSS.runSecureClient "api2.poloniex.com" 443 "/" app

希望这有帮助

Poloniex WebSocket API似乎需要安全连接,请参见:(我从WS-endpoint URL知道这一点,它使用
wss://
而不是
WS://
WS.runClient
使用不安全的
WS://
协议而不是安全的
wss://
协议,因此它将无法连接。尝试使用wuss库: 并将主要功能重写为:

import qualified Wuss as WSS (runSecureClient)
-- ...
main :: IO ()
main = withSocketsDo $ WSS.runSecureClient "api2.poloniex.com" 443 "/" app

希望这有帮助

无论出于何种原因,我的公共IP被阻止。我通过使用VPN解决了这个问题。

无论出于何种原因,我的公共IP被阻止。我通过使用VPN解决了这个问题。

我做了更改,但GHC吐出了以下内容:
***异常:握手失败(错误\u数据包\u解析“读取失败:无效头类型:72\n来自:\theader\n\n”)
@Jimbo我可以重现这个问题。尝试以下方法(对我来说很有效):
main=withSocketsDo$WSS.runSecureClient“api2.poloniex.com”443/“app
。如果它有效,我会编辑我的答案。@Jimbo,你没有忘记添加路径“/”,对吗?如果是这样的话,你能告诉我你使用的Network.Socket、Network.WebSockets和Wuss版本吗?路径是“/”,这些是我的版本:Network 2.6.3.6、Wuss 1.1.10@KyloRAM我会尝试重现这个问题,但在我这么做之前:你如何构建你的程序?我做了更改,但GHC吐出了这个:
***异常:HandshakeFailed(错误\u Packet\u Parsing“读取失败:无效的头类型:72\n来自:\theader\n\n”)
@Jimbo我可以重现该问题。尝试以下操作(对我有效):
main=withSocketsDo$WSS.runSecureClient“api2.poloniex.com”443/“app
.LMK如果有效,我会编辑我的答案。@Jimbo并且你没有忘记添加路径“/”,对吗?如果是的话,你能告诉我你使用的Network.Socket、Network.WebSockets和Wuss的版本吗?路径是“/”,这是我的版本:Network 2.6.3.6,Wuss 1.1.10@KyloRAM我会尝试重现这个问题,但在我这么做之前:你如何构建你的程序?