Haskell:
Wysyłanie żądania HTTP
Jak to zrobić:
W Haskellu do wysyłania żądań HTTP możemy użyć biblioteki http-conduit. Poniżej znajdziesz przykład prostego żądania GET.
import Network.HTTP.Simple
main :: IO ()
main = do
response <- httpBS "http://httpbin.org/get"
putStrLn $ "The status code was: " ++ show (getResponseStatusCode response)
putStrLn "The headers were:"
print $ getResponseHeaders response
putStrLn "The body was:"
BS.putStrLn $ getResponseBody responsePrzy uruchomieniu, wynik będzie podobny do poniższego:
The status code was: 200
The headers were:
[(CI.mk "Content-Type","application/json"), ...]
The body was:
{
...
}Deep Dive
W roku 2011, HTTP Conduit został stworzony jako część większej biblioteki conduit dla języka Haskell, ułatwiająca obsługę strumieni danych. Alternatywami dla http-conduit mogą być http-client lub bardziej niskopoziomowa http - ale conduit oferuje dużą elastyczność, zwłaszcza przy obsłudze dużych danych.
Podczas wysyłania zapytania, http-conduit tworzy połączenie z podanym URL, wysyła żądanie i czeka na odpowiedź. Jest to asynchroniczna operacja, która w Haskellu jest obsługiwana za pomocą monad IO, pozwalając na efekty uboczne w czysto funkcyjnym środowisku.
Alternatywne biblioteki jak Wreq lub Req też pozwalają na wysyłanie żądań HTTP, często z dodatkowymi udogodnieniami typu automatyczne przetwarzanie JSON, ale mogą być mniej elastyczne przy pracy ze specyficznymi rodzajami powiązań HTTP.
See Also
- Biblioteka
http-conduit: https://www.stackage.org/package/http-conduit - Dokumentacja
http-client, którejhttp-conduitużywa: https://www.stackage.org/package/http-client conduittutorial, pokazujący jak zarządzać strumieniami danych: https://www.yesodweb.com/book/conduit- Porównanie bibliotek HTTP dla Haskell: https://wiki.haskell.org/Network_programming#Libraries_for_HTTP_client_programming