haskell - Haskell websockets库不工作
问题描述
我能够通过https://www.websocket.org/echo.htmlwebsockets
成功使用该库。我也可以通过https://www.websocket.org连接到 api2.poloniex.com并成功查询到 websocket。
但是,当我尝试连接到 api2.poloniex.com 时,websockets
出现以下错误:
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
解决方案
问题是出于某种原因,我的公共 IP 被阻止了。我通过使用 VPN 解决了这个问题。
推荐阅读
- python - python matplotlib 无法显示图形
- java - 如何通过扩展获取类路径资源?
- ios - UICollectionViewCell 上不需要的 UIView(TapGesture 不起作用)
- javascript - React/Javascript - 在运行函数之前等待变量填充
- vue.js - 尝试将 TipTap WYSIWYG 添加到 Vue 表单文本区域
- c# - EntityReference 不能有超过一个相关对象 - 使用 LINQ 多对多
- python - 使用复杂的条件逻辑连接 Pyspark 数据帧(可能使用映射代替)
- mysql - TOP 函数的工作方式与 mysql 中的 LIMIT 不同吗?
- java - 使用 Angular 和 Spring Boot 从本地主机获取数据
- javascript - 通过 phonegap 应用程序从同一网络中的移动设备与本地服务器通信