2013-04-07 12 views
21

Jaka jest zalecana biblioteka do programowania klienta WWW, która obejmuje żądania HTTP.Biblioteka Haskell do komunikacji HTTP

Wiem, że istnieje pakiet o nazwie HTTP, ale nie obsługuje on protokołu HTTPS. Czy jest na to jakaś lepsza biblioteka?

Spodziewam się biblioteki z funkcjonalnością podobną do Haskella, taką jak this.

+5

Uszkodzenia wiązek libcurl dość często podczas używania SSL i wielu wątków. W żadnym wypadku nie polecałbym ich nikomu. – Carl

+2

można również wypróbować nową bibliotekę [http-strumieni] (http://hackage.haskell.org/packages/archive/http-streams/0.4.0.1/doc/html/Network-Http-Client.html) (tutaj [wstęp] (http://blogs.operationaldynamics.com/andrew/software/haskell/http-streams-introduction)) i blog o tym, jak to działa dla ciebie – jberryman

+0

@Carl: Cóż, usunąłem moją sugestię :) To szczerze mówiąc, nigdy nie próbowałem go używać. –

Odpowiedz

12

Biblioteka o nazwie wreq została wydana przez Bryana O'Sullivana, która jest świetna i łatwa w użyciu do komunikacji HTTP.

Podobnym poradnik dla że przez tego samego autora jest here.

+2

Używa 'lens' i oczekuje, że będziesz go również używał. Tylko FYI dla czytelników, ponieważ to mnie osobiście niszczy (ponieważ 'obiektyw' nie jest idiomatyczny). – MasterMastic

13

Network.HTTP.Conduit ma czyste API (używa Network.HTTP.Types) i jest dość prosty w użyciu, jeśli wiesz trochę o kanałach. Przykład:

{-# 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)  

Upewnij się również, że .

+0

Dlaczego upadek? –

+0

nie kompiluje się - myślę, że ... –

+0

tutorial link daje błąd 404 –

1

Servant jest łatwy w użyciu (choć trudne do zrozumienia) i magiczne. Umożliwia określenie interfejsu API jako niezamieszkanego typu i generuje na jego podstawie zachowania związane z żądaniami i odpowiedziami. Nigdy nie będziesz musiał się martwić serializacją lub deserializacją, a nawet JSON - automatycznie konwertuje JSON do i z natywnych obiektów Haskella, w oparciu o API. Ma również znakomite tutorial.