Haskell HTTP通信库

22

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

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

我希望有一个类似于这个的 Haskell 库功能。


5
在使用SSL和多线程时,libcurl绑定经常出现段错误。我不建议在任何情况下向任何人推荐它们。 - Carl
2
你也可以尝试使用新的http-streams库(这里有一篇介绍),并为它的工作原理撰写博客。 - jberryman
@Carl:那好吧,我撤回我的建议 :) 说实话,我从来没有尝试过使用它。 - Niklas B.
1
这个问题需要一个比较不同选择的答案(在我看来)。 - cic
1
@cic wreq 是最高级别的一个。它大量使用 lens 技术,提供了一致而简洁的接口。 - Sibi
4个回答

14

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)       

请确保参考教程


12

一位名为Bryan O'Sullivan发布了一个名为wreq的库,非常适合用于HTTP通信,易于使用。

同一作者还有相关教程here.

另外还有一个名为req的库提供了很棒的API。


4
它使用"Lens",期望你也使用它。只是提供给读者的信息,因为这让我感到不舒服(因为"Lens"根本不符合惯用语)。 - MasterMastic

5

1

Servant 很容易使用(尽管很难理解),并且非常神奇。它允许您将API指定为未被占用的类型,并基于此生成请求和响应行为。您将永远不必担心序列化或反序列化,甚至不必担心JSON--它会根据API自动将JSON转换为本机Haskell对象,并从中转换。它还有一个出色的tutorial


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接