Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Haskell servant-ConnectionError中创建客户端绑定_Haskell_Servant - Fatal编程技术网

在Haskell servant-ConnectionError中创建客户端绑定

在Haskell servant-ConnectionError中创建客户端绑定,haskell,servant,Haskell,Servant,我正在尝试使用Haskell服务库为newsapi.org提供的新闻api创建客户端绑定。我已创建以下端点: type NewsAPI = "top-headlines" :> QueryParam "country" String :> QueryParam "apiKey" String :> Get '[JSON] TopHeadlines 并试图将其命名为: topheadlines :: Maybe String -> Maybe String -> C

我正在尝试使用Haskell服务库为newsapi.org提供的新闻api创建客户端绑定。我已创建以下端点:

type NewsAPI = "top-headlines" :> QueryParam "country" String :> QueryParam "apiKey" String :> Get '[JSON] TopHeadlines
并试图将其命名为:

topheadlines :: Maybe String -> Maybe String -> ClientM TopHeadlines

api :: Proxy NewsAPI
api = Proxy

topheadlines = client api

query = topheadlines (Just "us") (Just "<api key>")

run3 :: IO ()
run3 = do
  manager' <- newManager defaultManagerSettings
  users <- runClientM query (mkClientEnv manager' (BaseUrl Https "newsapi.org/v2" 443 ""))
  print users
TopHeadings::Maybe String->Maybe String->ClientM TopHeadings
代理新闻api
api=代理
TopHeaders=客户端api
query=topheadlines(仅为“us”)(仅为“”)
run3::IO()
run3=do

它是两件事的结合:

  • api_key
    应该是
    apiKey
  • 依赖于
    parseBaseUrl

    burl  <- parseBaseUrl "http://newsapi.org/v2"
    
    burl QueryParam“country”字符串:>QueryParam“apiKey”字符串:>Get'[JSON]字符串
    标题::可能字符串->可能字符串->免费客户端字符串
    TopHeaders=客户端api
    代理新闻api
    api=代理
    main::IO()
    main=do
    测试
    测试::IO()
    测试=案例标题(仅“us”)(仅“API_键”)的
    纯n->
    putStrLn$“错误:获得纯结果:”++show n
    罚球(罚球失误)->
    putStrLn$“错误:立即获得错误:”++显示错误
    免费(StreamingRequest\u req\u k)->
    putStrLn$“错误:需要执行流式处理请求”
    免费(运行请求请求k)->do
    
    但正如错误所说,TLS似乎不受支持,您能否尝试将您的连接降级到
    Http
    ?以上代码基于菜谱代码:非常感谢。我能够修复api_密钥,但不知道如何使用parseBaseUrl。你知道为什么BaseUrl类型构造函数不在这里工作吗?
    {-# LANGUAGE DataKinds     #-}
    {-# LANGUAGE TypeOperators #-}
    
    module Main where
    
    import           Control.Monad.Free
    import           Servant.Client.Free
    
    import qualified Network.HTTP.Client                as HTTP
    import qualified Servant.Client.Internal.HttpClient as I
    
    import           Network.Wai.Handler.Warp           (run)
    import           Servant
    import           System.Environment                 (getArgs)
    
    type NewsAPI = "top-headlines" :> QueryParam "country" String :> QueryParam "apiKey" String :> Get '[JSON] String
    
    
    topheadlines :: Maybe String -> Maybe String -> Free ClientF String
    topheadlines = client api
    
    
    api :: Proxy NewsAPI
    api = Proxy
    
    
    main :: IO ()
    main = do
      test
    
    
    test :: IO ()
    test = case topheadlines (Just "us") (Just "API_KEY") of
        Pure n ->
            putStrLn $ "ERROR: got pure result: " ++ show n
    
        Free (Throw err) ->
            putStrLn $ "ERROR: got error right away: " ++ show err
    
        Free (StreamingRequest _req _k) ->
            putStrLn $ "ERROR: need to do streaming request" 
        Free (RunRequest req k) -> do
            burl  <- parseBaseUrl "http://newsapi.org/v2"
            mgr   <- HTTP.newManager HTTP.defaultManagerSettings
    
            let req' = I.requestToClientRequest burl req
            putStrLn $ "Making request: " ++ show req'
    
            res' <- HTTP.httpLbs req' mgr
            putStrLn $ "Got response: " ++ show res'