Nếu bạn cần kiểm tra HTTP client mà không muốn dựng backend thật, hãy dùng httpbin. Dịch vụ này nhận request và trả lại JSON mô tả chính request đó: headers, query params, body, IP nguồn, auth header... Nhờ vậy bạn có thể debug nhanh User-Agent, xác nhận Authorization có được gửi đúng không, hoặc ép client xử lý lỗi 500. Bạn có thể gọi httpbin bằng curl, script test, hoặc một API client như Apidog. Dịch vụ công khai nằm tại httpbin.org, mã nguồn mở theo giấy phép ISC.
httpbin là gì?
httpbin là một service HTTP request/response. Bạn gửi request đến một endpoint, httpbin trả về JSON mô tả request mà server đã nhận. Nó được tạo bởi Kenneth Reitz, tác giả thư viện Python requests, và được viết bằng Python với Flask.
Ví dụ: để kiểm tra HTTP client của bạn có gửi đúng header hay không, gọi:
curl https://httpbin.org/headers
Response sẽ liệt kê các header mà httpbin nhận được. Không cần database, auth flow, backend giả lập hay setup phức tạp.
Phiên bản public tại http://httpbin.org phù hợp cho kiểm tra nhanh. Tuy nhiên, vì đây là dịch vụ miễn phí dùng chung, nó có thể chậm hoặc tạm thời không khả dụng. Mã hiện nằm trong repo GitHub postmanlabs/httpbin, và cũng có các nhánh cộng đồng như của Kong. Nếu bạn dùng httpbin trong CI hoặc test lặp lại, nên tự host bằng Docker.
Các endpoint httpbin nên biết
Dưới đây là các endpoint thường dùng khi kiểm thử HTTP client:
| Endpoint | Dùng để làm gì |
|---|---|
/get |
Trả về query params, headers và IP nguồn của request GET |
/post |
Trả về form data, JSON body, raw body và headers của request POST |
/put, /patch, /delete
|
Kiểm tra các HTTP method tương ứng |
/status/{codes} |
Trả về status code chỉ định, ví dụ /status/404, /status/503
|
/headers |
Trả về các request headers mà server nhận được |
/ip |
Trả về IP nguồn |
/user-agent |
Trả về chuỗi User-Agent
|
/delay/{n} |
Delay n giây trước khi phản hồi, tối đa 10 giây |
/basic-auth/{user}/{passwd} |
Kiểm tra Basic Auth |
/bearer |
Kiểm tra Bearer token trong header Authorization
|
/redirect/{n} |
Redirect n lần để kiểm tra redirect handling |
/cookies |
Trả về cookies mà client gửi |
/uuid |
Trả về UUID ngẫu nhiên |
/anything |
Echo toàn bộ request, bất kể HTTP method |
Hai endpoint hữu ích nhất khi test logic lỗi là:
/status/{code}
/delay/{n}
Ví dụ:
curl -i https://httpbin.org/status/429
curl -i https://httpbin.org/delay/5
Dùng chúng để kiểm tra retry, timeout, fallback UI hoặc circuit breaker. Nếu bạn cần response giả có cấu trúc thay vì chỉ echo request, hãy kết hợp với API giả để kiểm tra dữ liệu.
Cách dùng httpbin để kiểm tra HTTP client
1. Kiểm tra query params và headers
Gửi request GET:
curl "https://httpbin.org/get?tool=apidog&check=headers"
Bạn sẽ nhận JSON tương tự:
{
"args": {
"check": "headers",
"tool": "apidog"
},
"headers": {
"Accept": "*/*",
"Host": "httpbin.org",
"User-Agent": "curl/..."
},
"origin": "..."
}
Dùng response này để xác nhận client đã gửi đúng query params và headers.
2. Kiểm tra JSON body khi POST
curl -X POST "https://httpbin.org/post" \
-H "Content-Type: application/json" \
-d '{"name": "widget", "qty": 3}'
httpbin sẽ trả về các trường như:
{
"data": "{\"name\": \"widget\", \"qty\": 3}",
"json": {
"name": "widget",
"qty": 3
},
"headers": {
"Content-Type": "application/json"
}
}
Kiểm tra:
-
jsoncó được parse đúng không -
datacó giữ nguyên raw payload không -
Content-Typecó đúng không
3. Ép client xử lý lỗi HTTP
Để kiểm tra nhánh xử lý lỗi 503:
curl -i "https://httpbin.org/status/503"
Bạn sẽ nhận response thật với status:
HTTP/2 503
Dùng endpoint này để test:
- retry logic
- exponential backoff
- fallback response
- error mapping
- logging khi API lỗi
Ví dụ với pseudo-code:
async function fetchWithRetry(url, retries = 3) {
for (let attempt = 1; attempt <= retries; attempt++) {
const res = await fetch(url)
if (res.ok) return res
if (attempt === retries) {
throw new Error(`Request failed with status ${res.status}`)
}
}
}
await fetchWithRetry("https://httpbin.org/status/503")
4. Kiểm tra timeout
Dùng /delay/{n} để mô phỏng API chậm:
curl -i "https://httpbin.org/delay/5"
Nếu client của bạn đặt timeout 2 giây, request này phải fail theo cách có kiểm soát.
Ví dụ với AbortController trong JavaScript:
const controller = new AbortController()
const timeout = setTimeout(() => {
controller.abort()
}, 2000)
try {
const res = await fetch("https://httpbin.org/delay/5", {
signal: controller.signal
})
console.log(await res.json())
} catch (err) {
console.error("Request timeout or aborted:", err.message)
} finally {
clearTimeout(timeout)
}
5. Kiểm tra Authorization header
Bearer token:
curl "https://httpbin.org/bearer" \
-H "Authorization: Bearer test-token"
Basic Auth:
curl -u "user:passwd" \
"https://httpbin.org/basic-auth/user/passwd"
Các endpoint này hữu ích khi bạn muốn xác nhận interceptor hoặc middleware auth trong client có gắn token đúng cách.
Dùng httpbin trong Apidog
Bạn không bắt buộc phải dùng terminal. Bất kỳ REST client nào cũng có thể gọi các URL của httpbin.
Trong Apidog, bạn có thể:
- Tạo request mới.
- Nhập URL, ví dụ:
https://httpbin.org/get
- Thêm query params hoặc headers.
- Gửi request.
- Kiểm tra JSON response với syntax highlighting.
- Lưu request để chạy lại hoặc chia sẻ với team.
Workflow này tiện hơn khi bạn muốn:
- so sánh response giữa nhiều môi trường
- lưu lịch sử test
- dùng biến môi trường
- chia sẻ request với đồng đội
- chuyển từ kiểm tra thủ công sang test có assertion
Nếu bạn thích terminal-first workflow, xem thêm các ứng dụng khách TUI REST API.
Tự host httpbin với Docker
Dùng bản public của http://httpbin.org là đủ cho kiểm tra nhanh. Nhưng với CI, test tự động hoặc môi trường nội bộ, bạn nên tự host để tránh phụ thuộc vào dịch vụ ngoài.
Image Docker chính thức có trên Docker Hub dưới dạng kennethreitz/httpbin.
Chạy:
docker pull kennethreitz/httpbin
docker run -p 80:80 kennethreitz/httpbin
Sau đó gọi:
curl http://localhost/get
Nếu cổng 80 đã bị chiếm, map sang cổng khác:
docker run -p 8080:80 kennethreitz/httpbin
Gọi lại:
curl http://localhost:8080/get
Thiết lập này phù hợp cho CI vì:
- không phụ thuộc vào
httpbin.org - không bị rate limit dùng chung
- giảm độ trễ mạng
- giữ request test trong môi trường riêng
Ví dụ trong script CI:
docker run -d --name httpbin -p 8080:80 kennethreitz/httpbin
curl --fail http://localhost:8080/status/200
curl --fail http://localhost:8080/get?ci=true
Khi nào nên dùng httpbin?
Dùng httpbin khi bạn cần kiểm tra nhanh:
- HTTP method
- headers
- query params
- JSON body
- form data
- cookies
- auth headers
- redirects
- timeout
- error handling
Không nên dùng httpbin nếu bạn cần:
- mock dữ liệu nghiệp vụ thực tế
- flow API nhiều bước
- stateful backend
- kiểm thử contract
- test case có assertion phức tạp
- webhook forwarding về localhost
Với các trường hợp đó, bạn cần mock server, API testing platform hoặc webhook testing tool.
Các lựa chọn thay thế httpbin
Postman Echo
Postman Echo là dịch vụ echo tương tự httpbin. Ví dụ:
https://postman-echo.com/get
Nó hỗ trợ GET, POST, auth và các endpoint tiện ích. Xem tài liệu Postman Echo để biết danh sách đầy đủ.
Nếu http://httpbin.org không khả dụng, Postman Echo là lựa chọn thay thế nhanh.
httpbin tự host
Nếu bạn vẫn muốn behavior giống httpbin nhưng ổn định hơn, tự host bằng Docker là lựa chọn tốt nhất. Cách này phù hợp khi bạn cần endpoint echo trong mạng riêng hoặc pipeline CI.
Dịch vụ mock
httpbin chỉ phản hồi lại request. Nó không tạo dữ liệu nghiệp vụ như danh sách user, đơn hàng, phân trang hoặc response theo schema.
Khi cần mock response có cấu trúc, hãy dùng mock server. Apidog có smart mocking để tạo response từ schema, giúp frontend có thể phát triển trước khi backend hoàn tất.
Apidog như lớp client và testing
httpbin là service nhận request. Apidog là công cụ để gửi request, lưu request, thêm assertion và chạy test.
Bạn có thể dùng Apidog để:
- gọi httpbin
- thiết kế endpoint
- gửi request
- lưu test case
- viết assertion
- nối nhiều request thành scenario
- chạy test trong CI
- mock API khi không cần echo service
Khi bạn muốn chuyển từ các lệnh curl rời rạc sang bộ kiểm thử có thể lặp lại, Apidog giúp lưu request hiện có và thêm assertion. Xem thêm các công cụ kiểm thử API trực tuyến miễn phí.
Câu hỏi thường gặp
httpbin có miễn phí không?
Có. Phiên bản public tại http://httpbin.org miễn phí và không yêu cầu tài khoản. Mã nguồn mở theo giấy phép ISC, nên bạn cũng có thể tự host miễn phí.
httpbin có còn được bảo trì không?
Mã nguồn nằm trong repo GitHub postmanlabs/httpbin. Việc bảo trì đã thay đổi theo thời gian và không phải lúc nào cũng đều đặn. Vì http://httpbin.org có thể không ổn định, nhiều team dùng bản Docker tự host cho các test quan trọng.
Có thể dùng httpbin để kiểm thử webhook không?
Không hẳn. httpbin echo request bạn gửi đến nó, nhưng nó không nhận event từ bên thứ ba rồi forward về máy local của bạn.
Để test webhook hoặc API localhost, xem hướng dẫn kiểm thử API localhost và webhook và bài giới thiệu về cách webhook hoạt động.
httpbin khác Postman Echo ở điểm nào?
Cả hai đều echo request HTTP dưới dạng JSON. httpbin là service Python/Flask mã nguồn mở ban đầu. Postman Echo là service được host bởi Postman. Với kiểm tra nhanh, hãy dùng service nào đang hoạt động ổn định và truy cập được từ môi trường của bạn.
Có thể test error handling bằng httpbin không?
Có. Dùng:
/status/{code}
Ví dụ:
curl -i https://httpbin.org/status/500
curl -i https://httpbin.org/status/429
Dùng:
/delay/{n}
để mô phỏng response chậm:
curl -i https://httpbin.org/delay/5
Đây là cách đơn giản để kiểm tra retry, timeout và xử lý lỗi của HTTP client.
Tóm lại
httpbin là công cụ nhỏ nhưng rất hữu ích khi bạn cần nhìn thấy chính xác request mà HTTP client đã gửi. Dùng /get và /post để kiểm tra params/body, /headers để debug headers, /status/{code} để ép lỗi, và /delay/{n} để test timeout. Với CI hoặc test lặp lại, hãy chạy httpbin bằng Docker thay vì phụ thuộc vào service public.
Khi cần nhiều hơn một echo endpoint, hãy dùng nền tảng đầy đủ hơn. Apidog cho phép bạn gọi httpbin, lưu request, thêm assertion, mock API và chạy test tự động. Tải xuống Apidog để biến các kiểm tra httpbin nhanh thành bộ test có thể lặp lại.
Top comments (0)