【问题标题】:Haskell library for HTTP communication用于 HTTP 通信的 Haskell 库
【发布时间】:2022-02-03 01:01:54
【问题描述】:

对于涉及 HTTP 请求的 Web 客户端编程,推荐使用什么库。

我知道有一个名为 HTTP 的包,但它似乎不支持 HTTPS。有没有更好的库呢?

我希望有一个类似于 this for Haskell 的库。

【问题讨论】:

  • 使用 SSL 和多线程时,libcurl 绑定的段错误很多。在任何情况下,我都不会向任何人推荐它们。
  • 您也可以尝试新的 http-streams 库(这里是 intro)并在博客中介绍它如何为您工作
  • @Carl:那么,我删除了我的建议 :) 老实说,我从未尝试过使用它
  • 这个问题需要一个比较不同替代方案的答案(恕我直言)。
  • @cic wreq 是最高级别的。它大量使用镜头来提供一致且简洁的界面。

标签: haskell haskell-platform


【解决方案1】:

Network.HTTP.Conduit 有一个干净的 API(它使用Network.HTTP.Types),如果您对管道有所了解,使用起来非常简单。示例:

{-# LANGUAGE OverloadedStrings #-}
module Main where

import Data.Conduit
import Network.HTTP.Conduit
import qualified Data.Aeson as J

main =
  do manager <- newManager def
     initReq <- parseUrl "https://api.github.com/user"
     let req = applyBasicAuth "niklasb" "password" initReq
     resp <- runResourceT $ httpLbs req manager

     print (responseStatus resp)
     print (lookup "content-type" (responseHeaders resp))

     -- you will probably want a proper FromJSON instance here,
     -- rather than decoding to Data.Aeson.Object
     print (J.decode (responseBody resp) :: Maybe J.Object)       

还要确保consult the tutorial

【讨论】:

    【解决方案2】:

    Bryan O'Sullivan 发布了一个名为 wreq 的库,该库非常棒且易于用于 HTTP 通信。

    同一作者的相关教程是here.

    还有另一个名为 req 的库,它提供了一个不错的 API。

    【讨论】:

    • 它使用lens 并希望您也使用它。仅供读者参考,因为这让我个人感到烦恼(因为lens 不是惯用的)。
    【解决方案3】:

    除了Network.HTTP.Conduit,还有Network.Http.Client,它公开了一个io-streams 接口。

    【讨论】:

      【解决方案4】:

      Servant 易于使用(尽管难以理解)且具有魔力。它允许您将 API 指定为无人居住的类型,并基于它生成请求和响应行为。您永远不必担心序列化或反序列化,甚至是 JSON——它会根据 API 自动将 JSON 与本地 Haskell 对象进行转换。它也有一个很棒的tutorial

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多