1

我试图弄清楚如何在 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的示例。我试图在我能理解但没有任何运气的地方找到一个很好的例子!您能否使用帖子值“login”->“James”、“Pass”->“MyPassword”向我展示。提前致谢!

4

1 回答 1

1

您需要更改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
于 2014-07-27T19:01:03.813 回答