Httpie: là gì, một HTTP client cho dòng lệnh

Tác giả: IT Sectr Đã đăng: 2026-05-08 Thời gian đọc: 8 phút

Httpie là một HTTP client console có cú pháp dễ đọc cho con người và đầu ra màu, được thiết kế để kiểm thử API từ dòng lệnh. Công cụ này sử dụng cú pháp trực quan: http GET https://api.example.com/users mà không cần chỉ định cờ cho tiêu đề và phần thân yêu cầu. Theo Httpie CLI Documentation (2026), tiện ích này hỗ trợ JSON theo mặc định, phiên, xác thực và plugin.

Điểm chính

  • Httpie là sự thay thế hiện đại cho cURL với cú pháp dễ đọc, tô màu nổi bật và tuần tự hóa JSON tích hợp.
  • Cú pháp của yêu cầu được xây dựng theo sơ đồ: http [method] URL [header:value] [key=value] mà không cần cờ bổ sung.
  • JSON theo mặc định — phần thân yêu cầu được coi là đối tượng JSON và tiêu đề Content-Type được đặt tự động.
  • Phiên lưu giữ cookie và tiêu đề giữa các yêu cầu, thuận tiện cho việc kiểm thử các điểm cuối đã xác thực.
  • Plugin mở rộng Httpie với hỗ trợ cho các định dạng bổ sung, loại xác thực và phương thức vận chuyển tùy chỉnh.

Httpie là gì và khác cURL như thế nào

Httpie (hoặc HTTPie) là một tiện ích dòng lệnh viết bằng Python giúp đơn giản hóa việc gửi yêu cầu HTTP so với cURL. Điểm khác biệt chính là cú pháp gần với ngôn ngữ tự nhiên: các đối số được phân tách bằng dấu cách, tiêu đề được chỉ định bằng dấu hai chấm và dữ liệu JSON được chỉ định bằng dấu bằng mà không cần thoát dấu ngoặc kép.

So sánh cURL và Httpie

Cùng một yêu cầu POST trong cURL cần ít nhất ba cờ (-X, -H, -d) và thoát JSON thủ công. Httpie làm điều tương tự với ba từ mà không cần cờ, tự động đặt Content-Type: application/json và tô màu đầu ra. Phản hồi được định dạng với thụt lề và tô màu cú pháp theo mặc định.

Thao táccURLHttpie
Yêu cầu GETcurl https://api.example.comhttp GET https://api.example.com
POST JSONcurl -X POST -H "Content-Type: application/json" -d '{"name":"test"}' https://api.example.comhttp POST https://api.example.com name=test
Tiêu đềcurl -H "Authorization: Bearer token123" https://api.example.comhttp GET https://api.example.com Authorization:"Bearer token123"

Cú pháp yêu cầu trong Httpie

Httpie sử dụng một định dạng dòng lệnh thống nhất không cần cờ cho các tham số chính. Phương thức HTTP được chỉ định làm đối số đầu tiên (GET, POST, PUT, DELETE, PATCH), URL làm đối số thứ hai. Nếu bỏ qua phương thức, Httpie tự động chọn GET (cho yêu cầu không có thân) hoặc POST (có thân).

Các loại đối số

  • Header:Value — tiêu đề yêu cầu với dấu hai chấm, không có khoảng trắng sau dấu hai chấm: Authorization:"Bearer token".
  • key=value — các trường của đối tượng JSON trong thân yêu cầu: name=John age=30.
  • key:=value — các giá trị JSON không phải chuỗi (số, boolean, mảng): active:=true tags:=["dev","test"].
  • key@file — tải giá trị từ một tệp: avatar@~/photo.jpg.

Httpie tự động xác định loại dữ liệu: nếu truyền key=value, phần thân được gửi dưới dạng JSON. Nếu truyền văn bản thô qua --raw, nó được gửi dưới dạng văn bản thuần. Định dạng form-data được kích hoạt bằng cờ -f.

bash
# Yêu cầu POST với dữ liệu JSON và một tiêu đề
http POST https://api.example.com/users \
    name="John Doe" \
    email="john@example.com" \
    role:="admin" \
    Authorization:"Bearer test123"

# Phản hồi có tô màu và Pretty-print
HTTP/1.1 201 Created
Content-Type: application/json
{
    "id": 42,
    "name": "John Doe"
}

Làm việc với JSON và tệp

Tuần tự hóa JSON trong Httpie hoạt động tự động: giá trị truyền dưới dạng key=value trở thành trường chuỗi của JSON. Đối với số và giá trị boolean, sử dụng key:=value. Các đối tượng lồng nhau được tạo bằng ký hiệu dấu chấm: address.city=Moscow.

Tải lên tệp và dữ liệu nhị phân

Httpie hỗ trợ định dạng multipart/form-data để tải lên tệp và dữ liệu qua cú pháp key@path. Nếu cần gửi nội dung tệp dưới dạng thân thô của yêu cầu, sử dụng chuyển hướng đầu vào: http POST example.com < file.json. Để tải phản hồi xuống tệp, sử dụng cờ -d (download).

bash
# Gửi JSON từ một tệp
http POST https://api.example.com/users < user.json

# Tải lên tệp qua multipart
http -f POST https://api.example.com/upload \
    photo@~/photo.jpg \
    description="Profile photo"

Quản lý phiên và cookie

Phiên trong Httpie lưu giữ trạng thái giữa các yêu cầu: cookie, tiêu đề và tham số xác thực. Phiên được tạo bằng cờ --session=name. Dữ liệu phiên được lưu trong tệp JSON trong thư mục ~/.httpie/sessions/. Phiên có hậu tố :readonly không được cập nhật sau yêu cầu.

Ví dụ kiểm thử phiên

Đầu tiên, yêu cầu POST tới /auth/login được gửi với thông tin đăng nhập — máy chủ trả về cookie phiên. Tất cả các yêu cầu sau đó tới các điểm cuối được bảo vệ trong cùng phiên tự động gửi cookie đã lưu, mô phỏng hành vi của trình duyệt khi kiểm thử API của ứng dụng di động.

bash
# Bước 1: xác thực
http --session=app-test POST https://api.example.com/auth/login \
    username="dev" password="secret"

# Bước 2: yêu cầu với cookie phiên đã lưu
http --session=app-test GET https://api.example.com/users/me

Xác thực và tiêu đề

Httpie hỗ trợ tất cả các loại xác thực chính qua cờ: -a user:pass cho Basic Auth, --auth-type=digest cho Digest, --auth-type=bearer TOKEN cho Bearer Token. Tiêu đề tùy chỉnh được thêm dưới dạng HeaderName:value ở bất kỳ đâu trong lệnh.

OAuth 2.0 và Bearer Token

Để kiểm thử API với OAuth 2.0, mã thông báo được truyền qua tiêu đề Authorization. Httpie không quản lý vòng đời mã thông báo ở cấp lõi — một script bên ngoài làm điều này. Lệnh http --auth-type=bearer --auth="$TOKEN" GET https://api.example.com/resource tương đương với việc chỉ định rõ tiêu đề với mã thông báo.

Sử dụng Httpie trong các script CI/CD

Httpie lý tưởng cho các pipeline CI/CD nhờ không có phụ thuộc (ngoại trừ Python) và đầu ra dễ đọc. Các lệnh dễ đọc trong nhật ký mà không cần phân tích thêm. Công cụ được cài đặt qua pip và có sẵn trong tất cả các image Docker phổ biến, bao gồm Alpine, Ubuntu và các image CI chính thức của Jenkins và GitLab. Điều này làm cho Httpie trở thành lựa chọn thuận tiện cho việc kiểm thử tự động các API REST và vi dịch vụ.

Kiểm tra điểm cuối health khi triển khai

Kịch bản điển hình là kiểm tra trạng thái API sau khi triển khai ứng dụng. Httpie gửi yêu cầu tới điểm cuối health và kết thúc với mã khác không nếu phản hồi không khớp với dự kiến. Cờ --check-status tự động trả về lỗi cho mã trạng thái >= 300.

bash
# Kiểm tra health trong script triển khai
http --check-status GET https://api.staging.example.com/health
    status:="ok" && \
    echo "API đang hoạt động bình thường" || \
    echo "Kiểm tra API thất bại"

Các tính năng nâng cao và plugin của Httpie

Httpie hỗ trợ plugin qua hệ thống Package Index. Plugin thêm các loại xác thực, định dạng tuần tự hóa và phương thức vận chuyển mới. Cài đặt được thực hiện qua pip: pip install httpie-plugin-name. Sau khi cài đặt, plugin tự động được kích hoạt ở lần khởi động tiếp theo của Httpie.

Các plugin Httpie phổ biến

  • httpie-jwt-auth — tự động lấy và làm mới mã thông báo JWT qua cơ chế refresh token.
  • httpie-oauth — hỗ trợ OAuth 2.0 Client Credentials và luồng Authorization Code với trao đổi mã tự động lấy mã thông báo.
  • httpie-editor — mở phần thân yêu cầu trong trình soạn thảo văn bản (vim, nano, VS Code) trước khi gửi.
  • httpie-image — hiển thị hình ảnh từ phản hồi trực tiếp trong terminal (cần kitty hoặc iTerm2).

Viết script và phân tích đầu ra

Httpie hỗ trợ lọc giống jq qua tùy chọn --pretty=format và đầu ra tương thích cURL qua --print. Cờ --quiet tắt đầu ra màu để dễ đọc hơn trong nhật ký CI. Để xử lý phản hồi theo chương trình, hãy sử dụng cờ --body, cờ này chỉ xuất phần thân phản hồi mà không có tiêu đề.

bash
# Trích xuất trường từ phản hồi JSON bằng jq
http GET https://api.example.com/users/1 | jq '.name'

# Chỉ xuất thân phản hồi (không có tiêu đề)
http --body GET https://api.example.com/health

# Gửi hàng loạt với các dữ liệu khác nhau từ tệp
while read -r line; do
    http POST https://api.example.com/items $line
done < items.txt

Định dạng đầu ra và tùy chỉnh

Httpie hỗ trợ định dạng đầu ra qua cờ --print: H (tiêu đề yêu cầu), B (thân yêu cầu), h (tiêu đề phản hồi), b (thân phản hồi). Tổ hợp --print=hb chỉ xuất tiêu đề và thân phản hồi. Cờ --pretty=all bật định dạng màu với thụt lề.

Bảng màu tùy chỉnh

Httpie hỗ trợ tùy chỉnh qua biến HTTPIE_COLORS. Cấu hình màu cho URL, tiêu đề, JSON và mã trạng thái. Có các chủ đề tích hợp: autumn, borland, fruity, monokai, native, tango cho các terminal khác nhau.

Đầu ra ở định dạng JSON

Để xử lý theo chương trình, hãy sử dụng --body --pretty=none, trả về JSON thô. Đầu ra gọn nhẹ hữu ích để chuyển cho jq, sed và các trình phân tích khác khi tự động hóa kiểm thử API trong script.

Định dạng đầu ra và tùy chỉnh giao diện

Httpie hỗ trợ nhiều định dạng đầu ra qua cờ --print: H (tiêu đề yêu cầu), B (thân yêu cầu), h (tiêu đề phản hồi), b (thân phản hồi). Tổ hợp --print=hb chỉ xuất tiêu đề và thân phản hồi, loại trừ siêu thông tin kết nối. Cờ --pretty=all bật định dạng màu với thụt lề để dễ đọc.

Bảng màu tùy chỉnh

Httpie hỗ trợ tùy chỉnh màu qua biến môi trường HTTPIE_COLORS. Bạn có thể cấu hình màu cho URL, tiêu đề, khóa JSON và mã trạng thái phản hồi. Có các chủ đề tích hợp: autumn, borland, fruity, monokai, native và tango cho các loại terminal và sở thích cá nhân khác nhau.

Đầu ra ở định dạng JSON không có định dạng

Để xử lý đầu ra theo chương trình, hãy sử dụng tổ hợp cờ --body --pretty=none, trả về JSON thô không có màu và thụt lề. Đầu ra gọn nhẹ hữu ích để chuyển cho jq, sed và các trình phân tích console khác khi tự động hóa kiểm thử API REST trong script shell.

Câu hỏi thường gặp

Httpie tốt hơn cURL tiêu chuẩn ở điểm nào?

Httpie cung cấp cú pháp dễ đọc hơn không cần cờ cho các thao tác cơ bản, tuần tự hóa JSON tự động, tô màu phản hồi và hỗ trợ phiên tích hợp. cURL vẫn không thể thiếu cho các thao tác cấp thấp: làm việc với FTP, SMTP và các giao thức không chuẩn.

Làm thế nào để gửi form-data qua Httpie?

Sử dụng cờ -f (hoặc --form): http -f POST example.com name=John file@~/photo.jpg. Httpie sẽ tự động đặt Content-Type: multipart/form-data. Không có cờ -f, dữ liệu được gửi dưới dạng application/json.

Httpie có hỗ trợ HTTPS và chứng chỉ không?

Có, Httpie hỗ trợ HTTPS. Đối với chứng chỉ tự ký, hãy sử dụng cờ --verify=no. Để chỉ định tệp CA tùy chỉnh: --verify=/path/to/cert.pem. Theo mặc định, việc xác minh chứng chỉ được bật.

Có thể sử dụng Httpie cho WebSocket không?

Không, Httpie không hỗ trợ WebSocket và chỉ dành riêng cho giao thức HTTP/HTTPS. Đối với WebSocket, hãy sử dụng websocat hoặc wscat. Httpie tập trung vào REST, GraphQL và các thao tác tệp.

Làm thế nào để lưu phản hồi vào tệp qua Httpie?

Sử dụng cờ -d (download): http -d GET https://example.com/file.zip. Httpie sẽ lưu tệp với tên gốc từ tiêu đề Content-Disposition hoặc URL. Để có tên tùy chỉnh, hãy chỉ định -o output.zip.

Tóm tắt

  • Httpie — một HTTP client console với cú pháp trực quan, JSON theo mặc định và đầu ra màu.
  • Cú pháp cơ bản http [method] URL [key=value] [Header:value] không yêu cầu cờ cho hầu hết các yêu cầu.
  • Tuần tự hóa JSON tự động: key=value trở thành trường JSON, key:=value cho số và giá trị boolean.
  • Phiên lưu giữ cookie và tiêu đề giữa các yêu cầu để kiểm thử các điểm cuối đã xác thực.
  • Xác thực hỗ trợ các sơ đồ Basic, Digest, Bearer và tùy chỉnh qua cờ --auth-type.
  • Tích hợp CI/CD với --check-status và không có phụ thuộc giúp Httpie thuận tiện cho các script triển khai.
  • Tải lên tệp qua multipart form-data với cờ -f và cú pháp key@file.

Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay

IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.

Thảo luận dự án

Đọc thêm