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” לפני הטקסט המקודד.
ראה גם:
- המדריך ל-HTTP במסמכי MDN: MDN HTTP Authentication
- תיעוד החבילה
http-conduit
: http-conduit on Hackage - תיעוד חבילת
base64-bytestring
: base64-bytestring on Hackage