2013-04-07 1 views
21

Что такое рекомендуемая библиотека для программирования веб-клиентов, которая включает HTTP-запросы.Библиотека Haskell для HTTP-связи

Я знаю, что есть пакет под названием HTTP, но он, похоже, не поддерживает HTTPS. Есть ли для этого лучшая библиотека?

Я ожидаю, что библиотека с функциональностью примерно this для Haskell.

+5

Libcurl привязки segfault довольно много при использовании SSL и нескольких потоков. Я бы никому не рекомендовал их никому. – Carl

+2

вы также можете попробовать новую библиотеку [http-streams] (http://hackage.haskell.org/packages/archive/http-streams/0.4.0.1/doc/html/Network-Http-Client.html) (здесь [intro] (http://blogs.operationaldynamics.com/andrew/software/haskell/http-streams-introduction)) и блог о том, как он работает для вас – jberryman

+0

@ Карл: Ну, тогда я удалил свое предложение :) К честно говоря, я никогда не пытался его использовать –

ответ

12

Библиотека, названная wreq, была выпущена Брайаном О'Салливаном, которая является отличной и простой в использовании для связи по протоколу HTTP.

Связанная учебник для этого же автора является here.

+2

Он использует 'lens' и ожидает, что вы его также используете. Просто FYI для читателей, потому что это лично меня беспокоит (поскольку «линза» не является идиоматикой вообще). – MasterMastic

13

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.

+0

Почему downvote? –

+0

не компилируется - я думаю ... –

+0

ссылка на учебное пособие дает ошибку 404 –

1

Servant проста в использовании (хотя и трудно понять) и волшебно. Он позволяет указать API как необитаемый тип и генерирует на нем поведение запросов и ответов. Вам никогда не придется беспокоиться о сериализации или десериализации или даже JSON - она ​​автоматически конвертирует JSON в и из собственных объектов Haskell на основе API. У него отличный tutorial.