Rust:
การส่งคำขอ HTTP ด้วยการตรวจสอบสิทธิ์พื้นฐาน
วิธีการ:
ก่อนอื่น ใส่ crate ที่จำเป็นลงใน Cargo.toml
ของคุณ:
[dependencies]
reqwest = "0.11"
base64 = "0.13"
ต่อไปนี้คือโค้ด Rust สำหรับการส่งคำขอ GET ด้วยการยืนยันตัวตนแบบพื้นฐาน:
use reqwest::header::{Authorization, Basic};
use std::error::Error;
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
let client = reqwest::Client::new();
let user = "Aladdin";
let password = "open sesame";
let auth = Basic {
username: user.into(),
password: Some(password.into()),
};
let response = client
.get("http://example.com/secrets")
.header(Authorization(auth))
.send()
.await?;
let content = response.text().await?;
println!("Response: {}", content);
Ok(())
}
ถ้าถูกต้อง มันจะพิมพ์ข้อมูลลับออกมา คุณเข้าใจแนวคิดนี้แล้ว
ลงลึก
ก่อนหน้า reqwest
, คุณจะเห็นคนจัดการกับ curl
ใน Rust มันเหมือนกับการชอบใช้เลื่อยมือมากกว่าเลื่อยไฟฟ้า การยืนยันตัวตนแบบพื้นฐาน ถึงแม้จะง่ายดาย แต่ไม่ใช่ Fort Knox มันเพียงแค่การเข้ารหัส Base64 ของ “username:password” – ไม่มีการเข้ารหัส, ดังนั้น HTTPS จึงเป็นสิ่งจำเป็น
ทางเลือกอื่น? OAuth 2.0 เต้นรอบ ๆ Basic, โดยเสนอโทเค็นแทนข้อมูลรับรองที่จับต้องได้ อย่างไรก็ตาม มันซับซ้อน จากนั้นมีการยืนยันตัวตน Bearer, ถือโทเค็นเหมือนกับการจับมือลับ
โดยลึกซึ้ง, reqwest
เป็นไคลเอ็นต์ HTTP ระดับสูงที่เข้ากันได้ดีกับคุณสมบัติ async ของ Rust ‘Basic’ struct สร้างส่วนหัว, ‘Authorization’ ใส่มันลงไป, และพร้อม, คุณกำลังเคาะประตูเซิร์ฟเวอร์ด้วยการกระซิบลับ
ดูเพิ่มเติม
สำหรับเรื่องราวและเวทย์มนตร์เพิ่มเติม:
- เอกสาร reqwest: https://docs.rs/reqwest
- ทำความเข้าใจการยืนยัน Access พื้นฐานของ HTTP: https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication
- การเขียนโปรแกรมแบบ async ใน Rust: https://rust-lang.github.io/async-book/
- เอกสาร crate base64 ของ rust: https://docs.rs/base64