Haskell,将值发布到网页

时间:2014-07-27 18:31:06

标签: haskell post get http-conduit

我正在试图弄清楚如何对Haskell中的网站执行GET和POST,我似乎很难解决如何进行简单的POST。我确定这是一个GET。

import Network.HTTP.Conduit
import Data.Conduit
import Data.Conduit.Binary (sinkFile)
import qualified Data.ByteString.Lazy as L
import Control.Monad.IO.Class (liftIO)
import Control.Monad.Trans.Resource (runResourceT)

main :: IO ()
main = do
  runResourceT $ do

    case parseUrl"https://www.google.com" of
      Nothing -> liftIO $ putStr "Not a valid URL"
      Just req -> withManager $ \manager -> do
        res <- httpLbs req manager
        liftIO . L.putStr $ responseBody res

有人可以告诉我一个如何在haskell中进行POST的示例。我试图在某个地方找到一个很好的例子,我可以理解,但没有运气!你可以通过使用帖子值“登录” - &gt;来告诉我吗? “詹姆斯”,“通行证” - &gt; “我的密码”。提前谢谢!

1 个答案:

答案 0 :(得分:0)

您需要更改Request数据类型,以表明它是POST方法调用。另外,请确保安装了最新的http-client (version 0.3.6),因为Michael Snoyman最近添加了setQueryString功能。

{-# LANGUAGE OverloadedStrings #-}
import Network.HTTP.Conduit
import Control.Monad.IO.Class
import qualified Data.ByteString.Lazy as L
import Control.Monad.Trans.Resource

main :: IO ()
main = do
  runResourceT $ do
    initReq <- parseUrl"https://www.google.com"
    let req = initReq {
          method = "POST"
          }
        req' = setQueryString [("login", Just "James"),("Pass", Just "MyPassword")] req

    withManager $ \manager -> do
      res <- httpLbs req' manager
      liftIO . L.putStr $ responseBody res