Httpie เป็นไคลเอนต์ HTTP แบบคอนโซลที่มีไวยากรณ์ที่มนุษย์อ่านง่ายและเอาต์พุตสีสัน ออกแบบมาเพื่อทดสอบ API จากบรรทัดคำสั่ง เครื่องมือนี้ใช้ไวยากรณ์ที่ใช้งานง่าย: http GET https://api.example.com/users โดยไม่ต้องระบุแฟล็กสำหรับส่วนหัวและเนื้อหาคำขอ ตาม Httpie CLI Documentation (2026) ยูทิลิตีนี้รองรับ JSON โดยค่าเริ่มต้น เซสชัน การรับรองความถูกต้อง และปลั๊กอิน
ประเด็นสำคัญ
Httpie (หรือ HTTPie) เป็นยูทิลิตีบรรทัดคำสั่งที่เขียนด้วย Python ซึ่งช่วยให้การส่งคำขอ HTTP ง่ายกว่า cURL ความแตกต่างหลักคือไวยากรณ์ที่ใกล้เคียงภาษาธรรมชาติ: อาร์กิวเมนต์จะถูกคั่นด้วยช่องว่าง ส่วนหัวจะระบุด้วยเครื่องหมายทวิภาค และข้อมูล JSON จะระบุด้วยเครื่องหมายเท่ากับโดยไม่ต้องหนีเครื่องหมายคำพูด
คำขอ POST เดียวกันใน cURL ต้องใช้แฟล็กอย่างน้อยสามตัว (-X, -H, -d) และการหนี JSON ด้วยตนเอง Httpie ทำสิ่งเดียวกันด้วยสามคำโดยไม่มีแฟล็ก โดยตั้งค่า Content-Type: application/json โดยอัตโนมัติและเน้นเอาต์พุต การตอบสนองจะถูกจัดรูปแบบด้วยการเยื้องและการเน้นไวยากรณ์โดยค่าเริ่มต้น
| การดำเนินการ | cURL | Httpie |
|---|---|---|
| คำขอ GET | curl https://api.example.com | http GET https://api.example.com |
| POST JSON | curl -X POST -H "Content-Type: application/json" -d '{"name":"test"}' https://api.example.com | http POST https://api.example.com name=test |
| ส่วนหัว | curl -H "Authorization: Bearer token123" https://api.example.com | http GET https://api.example.com Authorization:"Bearer token123" |
Httpie ใช้รูปแบบบรรทัดคำสั่งเดียวโดยไม่มีแฟล็กสำหรับพารามิเตอร์หลัก ระบุเมธอด HTTP เป็นอาร์กิวเมนต์แรก (GET, POST, PUT, DELETE, PATCH) และ URL เป็นอาร์กิวเมนต์ที่สอง หากละเมธอด Httpie จะเลือก GET (สำหรับคำขอที่ไม่มีเนื้อหา) หรือ POST (ที่มีเนื้อหา) โดยอัตโนมัติ
Authorization:"Bearer token"name=John age=30active:=true tags:=["dev","test"]avatar@~/photo.jpgHttpie จะกำหนดประเภทข้อมูลโดยอัตโนมัติ: หากส่ง key=value เนื้อหาจะถูกส่งเป็น JSON หากส่งข้อความดิบผ่าน --raw ข้อความนั้นจะถูกส่งเป็นข้อความธรรมดา รูปแบบ form-data จะเปิดใช้งานด้วยแฟล็ก -f
# คำขอ POST พร้อมข้อมูล JSON และส่วนหัว
http POST https://api.example.com/users \
name="John Doe" \
email="john@example.com" \
role:="admin" \
Authorization:"Bearer test123"
# การตอบสนองพร้อมการเน้นและ Pretty-print
HTTP/1.1 201 Created
Content-Type: application/json
{
"id": 42,
"name": "John Doe"
}
การซีเรียลไลซ์ JSON ใน Httpie ทำงานโดยอัตโนมัติ: ค่าที่ส่งเป็น key=value จะกลายเป็นฟิลด์สตริงของ JSON สำหรับตัวเลขและค่าบูลีน จะใช้ key:=value ออบเจกต์ซ้อนกันถูกสร้างด้วยเครื่องหมายจุด: address.city=Moscow
Httpie รองรับรูปแบบ multipart/form-data สำหรับการอัปโหลดไฟล์และข้อมูลผ่านไวยากรณ์ key@path หากจำเป็นต้องส่งเนื้อหาของไฟล์เป็นเนื้อหาดิบของคำขอ จะใช้การเปลี่ยนเส้นทางอินพุต: http POST example.com < file.json หากต้องการดาวน์โหลดการตอบสนองลงไฟล์ ให้ใช้แฟล็ก -d (download)
# ส่ง JSON จากไฟล์
http POST https://api.example.com/users < user.json
# อัปโหลดไฟล์ผ่าน multipart
http -f POST https://api.example.com/upload \
photo@~/photo.jpg \
description="Profile photo"
เซสชัน ใน Httpie จะเก็บสถานะระหว่างคำขอ: คุกกี้ ส่วนหัว และพารามิเตอร์การรับรองความถูกต้อง เซสชันถูกสร้างด้วยแฟล็ก --session=name ข้อมูลเซสชันจะถูกเก็บในไฟล์ JSON ในโฟลเดอร์ ~/.httpie/sessions/ เซสชันที่มีคำต่อท้าย :readonly จะไม่ได้รับการอัปเดตหลังคำขอ
ขั้นแรก ส่งคำขอ POST ไปที่ /auth/login พร้อมข้อมูลประจำตัว — เซิร์ฟเวอร์ส่งคืนคุกกี้เซสชัน คำขอที่ตามมาทั้งหมดไปยังเอนด์พอยต์ที่ได้รับการป้องกันภายในเซสชันเดียวกันจะส่งคุกกี้ที่บันทึกไว้โดยอัตโนมัติ ซึ่งจำลองพฤติกรรมของเบราว์เซอร์เมื่อทดสอบ API ของแอปมือถือ
# ขั้นตอนที่ 1: การรับรองความถูกต้อง
http --session=app-test POST https://api.example.com/auth/login \
username="dev" password="secret"
# ขั้นตอนที่ 2: คำขอพร้อมคุกกี้เซสชันที่บันทึกไว้
http --session=app-test GET https://api.example.com/users/me
Httpie รองรับประเภทการรับรองความถูกต้องหลักทั้งหมดผ่านแฟล็ก: -a user:pass สำหรับ Basic Auth --auth-type=digest สำหรับ Digest --auth-type=bearer TOKEN สำหรับ Bearer Token ส่วนหัวแบบกำหนดเองจะถูกเพิ่มเป็น HeaderName:value ในตำแหน่งใดก็ได้ของคำสั่ง
ในการทดสอบ API ที่ใช้ OAuth 2.0 โทเค็นจะถูกส่งผ่านส่วนหัว Authorization Httpie ไม่จัดการวงจรชีวิตของโทเค็นในระดับคอร์ — สคริปต์ภายนอกเป็นผู้จัดการ คำสั่ง http --auth-type=bearer --auth="$TOKEN" GET https://api.example.com/resource เทียบเท่ากับการระบุส่วนหัวพร้อมโทเค็นอย่างชัดเจน
Httpie เหมาะอย่างยิ่งสำหรับไปป์ไลน์ CI/CD เนื่องจากไม่มีการพึ่งพา (ยกเว้น Python) และเอาต์พุตที่อ่านง่าย คำสั่งอ่านง่ายในล็อกโดยไม่ต้องแยกวิเคราะห์เพิ่มเติม เครื่องมือนี้ติดตั้งผ่าน pip และมีอยู่ใน Docker อิมเมจยอดนิยมทั้งหมด รวมถึง Alpine, Ubuntu และอิมเมจ CI อย่างเป็นทางการของ Jenkins และ GitLab สิ่งนี้ทำให้ Httpie เป็นตัวเลือกที่สะดวกสำหรับการทดสอบ REST API และไมโครเซอร์วิสโดยอัตโนมัติ
สถานการณ์ทั่วไปคือการตรวจสอบสถานะของ API หลังจากการ deploy แอปพลิเคชัน Httpie ส่งคำขอไปยังเอนด์พอยต์ health และสิ้นสุดด้วยโค้ดที่ไม่ใช่ศูนย์หากการตอบสนองไม่ตรงกับที่คาดไว้ แฟล็ก --check-status จะส่งคืนข้อผิดพลาดโดยอัตโนมัติสำหรับรหัสสถานะ >= 300
# ตรวจสอบ health ในสคริปต์ deploy
http --check-status GET https://api.staging.example.com/health
status:="ok" && \
echo "API ทำงานปกติ" || \
echo "การตรวจสอบ API ล้มเหลว"
Httpie รองรับปลั๊กอินผ่านระบบ Package Index ปลั๊กอินเพิ่มประเภทการรับรองความถูกต้อง รูปแบบการซีเรียลไลซ์ และการขนส่งใหม่ การติดตั้งทำผ่าน pip: pip install httpie-plugin-name หลังการติดตั้ง ปลั๊กอินจะเปิดใช้งานโดยอัตโนมัติเมื่อเริ่ม Httpie ครั้งถัดไป
Httpie รองรับการกรองแบบ jq ผ่านตัวเลือก --pretty=format และเอาต์พุตที่เข้ากันได้กับ cURL ผ่าน --print แฟล็ก --quiet จะปิดเอาต์พุตสีเพื่อให้อ่านง่ายขึ้นในล็อก CI สำหรับการประมวลผลการตอบสนองเชิงโปรแกรม ให้ใช้แฟล็ก --body ซึ่งจะแสดงเฉพาะเนื้อหาการตอบสนองโดยไม่มีส่วนหัว
# ดึงฟิลด์จากคำตอบ JSON ด้วย jq
http GET https://api.example.com/users/1 | jq '.name'
# แสดงเฉพาะเนื้อหาการตอบสนอง (ไม่มีส่วนหัว)
http --body GET https://api.example.com/health
# ส่งเป็นชุดพร้อมข้อมูลที่แตกต่างจากไฟล์
while read -r line; do
http POST https://api.example.com/items $line
done < items.txt
Httpie รองรับรูปแบบเอาต์พุตผ่านแฟล็ก --print: H (ส่วนหัวคำขอ), B (เนื้อหาคำขอ), h (ส่วนหัวการตอบสนอง), b (เนื้อหาการตอบสนอง) ชุด --print=hb จะแสดงเฉพาะส่วนหัวและเนื้อหาการตอบสนอง แฟล็ก --pretty=all เปิดการจัดรูปแบบสีพร้อมการเยื้อง
Httpie รองรับการปรับแต่งผ่านตัวแปร HTTPIE_COLORS กำหนดค่าสีสำหรับ URL ส่วนหัว JSON และรหัสสถานะ มีธีมในตัว: autumn, borland, fruity, monokai, native, tango สำหรับเทอร์มินัลต่างๆ
สำหรับการประมวลผลเชิงโปรแกรม ให้ใช้ --body --pretty=none ซึ่งส่งคืน JSON ดิบ เอาต์พุตแบบกะทัดรัดมีประโยชน์สำหรับส่งต่อให้ jq, sed และตัวแยกวิเคราะห์อื่นๆ เมื่อทำงานอัตโนมัติในการทดสอบ API ในสคริปต์
Httpie รองรับรูปแบบเอาต์พุตหลายรูปแบบผ่านแฟล็ก --print: H (ส่วนหัวคำขอ), B (เนื้อหาคำขอ), h (ส่วนหัวการตอบสนอง), b (เนื้อหาการตอบสนอง) ชุด --print=hb จะแสดงเฉพาะส่วนหัวและเนื้อหาการตอบสนอง ไม่รวมข้อมูลเมตาของการเชื่อมต่อ แฟล็ก --pretty=all เปิดการจัดรูปแบบสีพร้อมการเยื้องเพื่อความอ่านง่าย
Httpie รองรับการปรับแต่งสีผ่านตัวแปรสภาพแวดล้อม HTTPIE_COLORS คุณสามารถกำหนดค่าสีสำหรับ URL ส่วนหัว คีย์ JSON และรหัสสถานะการตอบสนอง มีธีมในตัว: autumn, borland, fruity, monokai, native และ tango สำหรับประเภทเทอร์มินัลและความชอบส่วนบุคคลที่แตกต่างกัน
สำหรับการประมวลผลเอาต์พุตเชิงโปรแกรม ให้ใช้ชุดแฟล็ก --body --pretty=none ซึ่งส่งคืน JSON ดิบโดยไม่มีสีและการเยื้อง เอาต์พุตแบบกะทัดรัดมีประโยชน์สำหรับส่งต่อให้ jq, sed และตัวแยกวิเคราะห์คอนโซลอื่นๆ เมื่อทำงานอัตโนมัติในการทดสอบ REST API ในสคริปต์เชลล์
คำถามที่พบบ่อย
Httpie นำเสนอไวยากรณ์ที่อ่านง่ายกว่าโดยไม่มีแฟล็กสำหรับการดำเนินการพื้นฐาน การซีเรียลไลซ์ JSON อัตโนมัติ การเน้นสีของการตอบสนอง และการรองรับเซสชันในตัว cURL ยังคงจำเป็นสำหรับการดำเนินการระดับต่ำ: การทำงานกับ FTP, SMTP และโปรโตคอลที่ไม่เป็นมาตรฐาน
ใช้แฟล็ก -f (หรือ --form): http -f POST example.com name=John file@~/photo.jpg Httpie จะตั้งค่า Content-Type: multipart/form-data โดยอัตโนมัติ หากไม่มีแฟล็ก -f ข้อมูลจะถูกส่งเป็น application/json
ใช่ Httpie รองรับ HTTPS สำหรับใบรับรองที่ลงนามด้วยตนเอง ให้ใช้แฟล็ก --verify=no ในการระบุไฟล์ CA แบบกำหนดเอง: --verify=/path/to/cert.pem โดยค่าเริ่มต้น การตรวจสอบใบรับรองจะเปิดอยู่
ไม่ Httpie ไม่รองรับ WebSocket และมีไว้สำหรับโปรโตคอล HTTP/HTTPS เท่านั้น สำหรับ WebSocket ให้ใช้ websocat หรือ wscat Httpie มุ่งเน้นที่ REST, GraphQL และการทำงานกับไฟล์
ใช้แฟล็ก -d (download): http -d GET https://example.com/file.zip Httpie จะบันทึกไฟล์ด้วยชื่อดั้งเดิมจากส่วนหัว Content-Disposition หรือ URL สำหรับชื่อที่กำหนดเอง ให้ระบุ -o output.zip
สรุป
http [method] URL [key=value] [Header:value] ไม่ต้องใช้แฟล็กสำหรับคำขอส่วนใหญ่เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ
อ่านเพิ่มเติม