在Haskell servant-ConnectionError中创建客户端绑定
我正在尝试使用Haskell服务库为newsapi.org提供的新闻api创建客户端绑定。我已创建以下端点:在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
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'