httpGetをさらにリファクタリング
HaskellでHTTPのGETリクエストを投げる話のつづき。
イマイチかっこよくないところを関数化するというアプローチを更に押し進めて、以下のような感じになりました。
import Network.HTTP import Network.URI import Data.Maybe httpGet :: String -> IO (String) httpGet url = parseURI' url >>= getRequest' >>= simpleHTTP >>= getResponseBody parseURI' :: String -> IO (URI) parseURI' = return . fromJust . parseURI getRequest' :: URI -> IO (Request String) getRequest' uri = return $ Request { rqURI = uri ,rqMethod = GET ,rqHeaders = [(Header HdrAcceptCharset "UTF-8") , (Header HdrAccept "text/xml; charset=UTF-8") ] ,rqBody = "" }
httpGet本体は相当シンプルになりました。
また以前のコードではレスポンスからボディを得る処理を自前で書いていたのですが、Network.HTTP.getResponseBodyという関数があることを知ったので置き換えました。APIを読まずにPG書いちゃいかんですね・・・
なお、このコードはシンプルさを優先するためにエラー処理を怠っていることに注意して下さい。このコードでは不正なURLが入力されたときのエラーを拾えません。