我正在尝试编写一个访问https网址的haskell程序,其中会自动下载文件。该站点请求身份验证。我尝试使用Req库,但我无法理解所有的网络和网络概念。
任何人都可以给我一些模板代码或者至少更准确地告诉我哪里可以找到我需要的功能?
这是我到目前为止编写的代码,但是它不起作用:
import Control.Monad
import Control.Monad.IO.Class
import Data.Aeson
import Data.Default.Class
import Data.Maybe (fromJust)
import Data.Monoid ((<>))
import Data.Text as T
import GHC.Generics
import Network.HTTP.Req
import qualified Data.ByteString.Char8 as B
main = runReq def $ do
let myMethod = GET
myUrl = https $ T.pack "https://..."
myBody = NoReqBody
myProxy = ignoreResponse
myOption = basicAuth (B.pack "user") (B.pack "password")
m <- req myMethod myUrl myBody myProxy myOption
return ()
使用包http-client
的示例示例:
#!/usr/bin/env stack
-- stack script --resolver lts-12.7
{-# LANGUAGE OverloadedStrings #-}
import qualified Data.ByteString.Lazy.Char8 as L8
import Network.HTTP.Client (defaultManagerSettings, Manager, applyBasicAuth)
import Network.HTTP.Simple
import Network.HTTP.Client.TLS (getGlobalManager)
main :: IO ()
main = do
manager <- getGlobalManager
printResponse manager "http://some-domain.com"
printResponse :: Manager -> Request -> IO ()
printResponse mgr url = do
let request = setRequestManager mgr url
request' = applyBasicAuth "user" "password" request
response <- httpLBS request'
putStrLn $ "The status code was: " ++ show (getResponseStatusCode response)
print $ getResponseHeader "Content-Type" response
L8.putStrLn $ getResponseBody response
一些参考文档: