Lua:
การส่งคำขอ HTTP ด้วยการตรวจสอบสิทธิ์พื้นฐาน
วิธีการ:
Lua ไม่มีการสนับสนุน HTTP ในตัว ดังนั้นคุณจะต้องใช้ไลบรารีภายนอก เช่น socket.http
จาก LuaSocket หรือ http.request
จากไลบรารี http
หากคุณใช้ Lua 5.3+ สำหรับการตรวจสอบสิทธิ์พื้นฐาน ให้เข้ารหัสข้อมูลรับรองและเพิ่มพวกเขาในส่วนหัวของคำขอ
local http = require("socket.http")
local ltn12 = require("ltn12")
local mime = require("mime")
-- ข้อมูลรับรองของคุณ
local username = "Aladdin"
local password = "openSesame"
local credentials = mime.b64(username .. ":" .. password)
-- การตั้งค่าคำขอ
local response_body = {}
local res, code, response_headers = http.request{
url = "http://example.com/data",
method = "GET",
headers = {
["Authorization"] = "Basic " .. credentials
},
sink = ltn12.sink.table(response_body)
}
-- ผลลัพธ์ที่ได้
if code == 200 then
print(table.concat(response_body))
else
print("Error: " .. (res or code))
end
ขุดลึก
HTTP Basic Authentication เป็นวิธีสำหรับ HTTP user agent ในการให้ชื่อผู้ใช้และรหัสผ่านเมื่อทำคำขอ ถูกประดิษฐ์ขึ้นในช่วงต้นของประวัติศาสตร์เว็บ เป็นที่รองรับอย่างแพร่หลาย แต่ไม่ปลอดภัยมาก; ข้อมูลรับรองเพียงถูกเข้ารหัสแบบ base64 ไม่ถูกเข้ารหัส
ทางเลือก ได้แก่ Digest Authentication, OAuth และ API keys – ทั้งหมดนี้ให้ความปลอดภัยที่แข็งแกร่งกว่า Basic auth จะใช้สำหรับการเขียนสคริปต์การทดสอบอย่างรวดเร็ว เครื่องมือภายใน หรือในกรณีที่การขนส่งมีการรักษาความปลอดภัยผ่าน HTTPS
ในการดำเนินการตรวจสอบสิทธิ์พื้นฐานใน Lua โดยทั่วไปคุณจะสร้างสตริงที่รวมชื่อผู้ใช้และรหัสผ่านที่คั่นด้วยจุดคั่นย่อหน้า (:), จากนั้นเข้ารหัสสตริงนั้นด้วย base64 สตริงที่เข้ารหัสนี้จะถูกส่งในส่วน Authorization
ของส่วนหัวคำขอ HTTP ของคุณ
ธรรมชาติที่ยืดหยุ่นของ Lua หมายความว่าคุณมีตัวเลือกในการใช้ไลบรารีเพื่อจัดการกับ HTTP และการเข้ารหัส base64 LuaSocket ได้รับการทาบทามสำหรับการดำเนินงานเครือข่ายมาอย่างยาวนาน แม้ว่าเวอร์ชันใหม่ของ Lua จะแนะนำทางเลือกอื่นเช่นไลบรารี http
หรือการผูกพันกับ CURL
สำหรับงานที่ซับซ้อนกว่า
ดูเพิ่มเติม
- เอกสาร LuaSocket: http://w3.impa.br/~diego/software/luasocket/http.html
- LuaSec สำหรับการรองรับ HTTPS: https://github.com/brunoos/luasec/wiki
- บทนำเกี่ยวกับ HTTP Authentication: https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication
- RFC 2617 – HTTP Authentication: Basic and Digest Access Authentication: https://tools.ietf.org/html/rfc2617