使用Haskell进行https身份验证

问题描述 投票:1回答:1

我正在尝试编写一个访问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 ()
haskell networking web https
1个回答
2
投票

使用包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

一些参考文档:

© www.soinside.com 2019 - 2024. All rights reserved.