kenkovlog

Haskell, Python, Vim, ...

HaskellでHTTP

HaskellでHTTP!!ということでやってみました。
具体的には、指定先のHTMLを取得してきます。
サンプルコードです。

import Network.HTTP
import Network.HTTP.Proxy (parseProxy)
import Network.Browser (browse, request, setProxy, request)
import Data.Maybe

main :: IO ()
main = do
  -- リクエストを送り、レスポンスを取得する。
  (uri, res) <- browse $ request $ getRequest "http://google.co.jp"
  -- レスポンスの表示
  putStr $ rspBody res

上のプログラムで使っている主な関数の型は

Network.HTTP
  getRequest :: String -> Request_String
Network.HTTP.Base
  type Request_String = Request String
Network.Browser
  request :: HStream ty => Request ty -> BrowserAction (HandleStream ty) (URI, Response ty)
  browse :: BrowserAction conn a -> IO a


プロキシを使う場合には次のようにします。

main :: IO ()
main = do
  (uri, res) <- browse $ do
         -- プロキシを設定してリクエストを送る
         setProxy . fromJust $ parseProxy "proxy.server:8080"
         request $ getRequest "http://google.co.jp"
  putStr $ rspBody res

プロキシ関連の関数の型は次のようになります。

Network.HTTP.Proxy
  parseProxy :: String -> Maybe Proxy
Network.HTTP.Base
  setProxy :: Proxy -> BrowserAction t ()