Надсилання HTTP-запиту з базовою автентифікацією

Haskell:
Надсилання HTTP-запиту з базовою автентифікацією

Як це зробити:

{-# LANGUAGE OverloadedStrings #-}

import Network.HTTP.Client
import Network.HTTP.Types.Header (hAuthorization)
import Network.HTTP.Base64 (encode)

-- Підготовка з'єднання
prepareRequest url username password = do
  manager <- newManager defaultManagerSettings
  req <- parseRequest url
  let auth = encode $ username <> ":" <> password
      headers = [(hAuthorization, "Basic " <> auth)]
  return $ req { requestHeaders = headers }

-- Відправка запиту
sendRequest :: String -> String -> String -> IO ()
sendRequest url username password = do
  req <- prepareRequest url username password
  manager <- newManager defaultManagerSettings
  response <- httpLbs req manager
  putStrLn $ "Status code: " ++ show (responseStatus response)
  print $ responseBody response

-- Приклад використання
main :: IO ()
main = sendRequest "http://example.com/protected" "user" "pass"

Запуск коду надасть результат, подібний наступному:

Status code: 200
"{\"example\":\"You accessed protected content!\"}"

Поглиблений Розбір:

Коли інтернет тільки розпочинав своє становлення, безпека часто ігнорувалася. Базова аутентифікація (Base64-кодування логіну і пароля) — одна з перших систем захисту, але зараз вона вважається ненадійною та легкою для зламу. Завжди використовуйте HTTPS для захисту аутентифікаційної інформації. Альтернативами базовій аутентифікації є OAuth, API ключі або ж використання токенів. У даному прикладі, ми використовуємо бібліотеку http-client для створення HTTP-запитів та http-client-tls для роботи з HTTPS.

See Also: