שליחת בקשת HTTP עם אימות בסיסי

Haskell:
שליחת בקשת HTTP עם אימות בסיסי

איך לעשות:

כדי לשלוח בקשה עם אימות בסיסי ב-Haskell, ניתן להשתמש בחבילה http-conduit ביחד עם Network.HTTP.Simple.

import Network.HTTP.Simple
import Network.HTTP.Types.Header (hAuthorization)
import Data.ByteString.Char8 (pack)
import Data.ByteString.Base64 (encode)

-- יצירת כותרת אימות בסיסית
basicAuth :: String -> String -> Header
basicAuth username password = (hAuthorization, "Basic " <> encode (pack (username <> ":" <> password)))

-- פונקציה לביצוע בקשת GET עם אימות בסיסי
makeRequest :: String -> String -> String -> IO ()
makeRequest url username password = do
    let request = setRequestMethod "GET"
                  $ setRequestHeaders [basicAuth username password]
                  $ defaultRequest
                  { getUri = Just (URI.parseURI url) }
    response <- httpLBS request
    putStrLn $ "Status code: " ++ show (getResponseStatusCode response)
    print $ getResponseBody response

-- שימוש בפונקציה
main :: IO ()
main = makeRequest "http://example.com/protected" "user" "pass"

תוצאת הדוגמה:

Status code: [קוד המצב שהתקבל מהשרת]
[תגובת הגוף שהתקבלה מהשרת]

עיון עמוק:

שליחת בקשות עם אימות בסיסי היא טכניקה כבר קיימת מאז הימים הראשונים של האינטרנט. אימות בסיסי אינו הכי בטוח כיוון שהוא מצפין את שם המשתמש והסיסמה ב-base64, שאינה הצפנה חזקה. ישנם שיטות אימות מתקדמות יותר כמו OAuth, אבל לפעמים אימות בסיסי מספיק.

בעת ביצוע בקשת אימות בסיסי ב-Haskell, נחוץ להתמודד עם חבילות חיצוניות ולהבין כיצד מתבצעת קידוד ל-base64. כאשר יוצרים את כותרת האימות, יש לשים לב לכך ששם המשתמש והסיסמה מחוברים עם נקודותיים ולאחר מכן מקודדים ל-base64 ומוספים את המילה “Basic” לפני הטקסט המקודד.

ראה גם: