Response Headers
Mọi response từ FourA API đều bao gồm một tập hợp nhỏ các custom header. Chúng rất hữu ích cho việc truy vết, hỗ trợ và phân tích sau khi thực thi.
Các Header do FourA Thiết lập
| Header | Thiết lập trên | Mô tả |
|---|---|---|
X-Foura-Request-Id |
Mọi response /api/*, bao gồm cả lỗi và lỗi 401 |
Một UUID định danh request này. Hãy ghi log ở phía bạn. |
Content-Type |
Mọi response | Luôn là application/json cho envelope. Content-type của mục tiêu sẽ được trả về bên trong trường headers của envelope. |
X-Foura-Request-Id
Mỗi cuộc gọi đến POST /api/single/, POST /api/proxy/, hoặc POST /api/browser/ đều được gắn thẻ bằng một UUID. Header này được thiết lập ngay cả khi xác thực thất bại, vì vậy bạn cũng có thể liên kết các cuộc gọi bị cấu hình sai.
curl -i -X POST https://eu.api.foura.ai/api/single/ \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"method": "GET", "url": "https://example.com"}'
HTTP/1.1 200 OK
X-Foura-Request-Id: 9f1c4e6c-7b2a-4d3e-8a1f-2c9d8e4a3b15
Content-Type: application/json
...
Khi nào cần sử dụng
- Yêu cầu hỗ trợ (Support ticket): gửi kèm request ID và chúng tôi có thể tìm thấy chính xác cuộc gọi đó trong hệ thống.
- Log của riêng bạn: lưu trữ nó bên cạnh dòng log ứng dụng của bạn. Nếu khách hàng khiếu nại rằng "dữ liệu bị sai lúc 14:32", bạn có thể phát lại chính xác request đó.
- Truy vết trên Dashboard: cùng một ID đó sẽ xuất hiện trong Activity feed cho các key bạn quản lý, nhờ đó bạn có thể mở hàng tương ứng và kiểm tra request cũng như response được ghi lại.
Ví dụ: ghi log ở phía bạn
import logging
import requests
log = logging.getLogger(__name__)
def fetch(url, api_key):
resp = requests.post(
"https://eu.api.foura.ai/api/single/",
headers={"X-API-Key": api_key, "Content-Type": "application/json"},
json={"method": "GET", "url": url},
)
request_id = resp.headers.get("X-Foura-Request-Id", "no-id")
log.info("foura request_id=%s url=%s status=%s", request_id, url, resp.status_code)
resp.raise_for_status()
return resp.json()
async function fetchPage(url, apiKey) {
const resp = await fetch('https://eu.api.foura.ai/api/single/', {
method: 'POST',
headers: { 'X-API-Key': apiKey, 'Content-Type': 'application/json' },
body: JSON.stringify({ method: 'GET', url })
});
const requestId = resp.headers.get('X-Foura-Request-Id') || 'no-id';
console.log(`foura request_id=${requestId} url=${url} status=${resp.status}`);
return resp.json();
}
Hành vi Cache
API không thiết lập Cache-Control hoặc ETag trên các response. Mọi cuộc gọi đều truy cập trực tiếp vào backend. Nếu bạn cần caching, hãy tự thêm vào phía bạn.
Target Response Headers
Các header mà trang web mục tiêu trả về không nằm trên response của FourA API. Chúng được trả về bên trong JSON envelope dưới dạng trường headers. Đối với các endpoint Single và Proxy, đây là một mảng các đối tượng header theo từng hop (một mục nhập cho mỗi bước redirect). Đối với endpoint Browser, đó là một đối tượng phẳng chứa các response header cuối cùng.
{
"status": 200,
"headers": [
{ "Content-Type": "text/html; charset=utf-8", "Server": "..." }
],
"data": "<!doctype html>...",
"total_time": 0.42
}
Nếu bạn cần một header mục tiêu cụ thể, hãy đọc nó từ trường headers của envelope, chứ không phải từ HTTP response của chính cuộc gọi API.
Nội dung liên quan
- API Endpoints: Cấu trúc envelope của request và response
- API Errors: Cách cấu trúc các response lỗi
- Activity Log: Lịch sử theo từng request được định danh bằng request ID