よくある問題
FourA APIを使用する際、最もよく発生する問題の解決策です。
コンテンツが空、または不完全な場合
症状: APIはステータス200を返しますが、dataフィールドが空であるか、期待されるコンテンツが含まれていません。
原因: 対象のページが、初期ロードの後にJavaScriptを使用してコンテンツをレンダリングしています。
解決策: single endpointからbrowser endpointに切り替えます。checkTextを使用して、コンテンツがロードされたことを確認してください:
curl -X POST https://eu.api.foura.ai/api/browser/ \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/products",
"timeout_ms": 15000,
"checkText": "product-list"
}'
注意: browser endpointは、コンテンツを(dataではなく)bodyフィールドで返します。
403 ForbiddenまたはCaptchaページ
症状: APIが、captchaチャレンジまたはアクセス拒否ページを含むHTMLを返します。
原因: 対象のサイトがリクエストを自動化されたものと検知し、ブロックしました。
解決策: 自動IPローテーションを行うためにproxy endpointを使用します:
curl -X POST https://eu.api.foura.ai/api/proxy/ \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"maxTries": 5,
"request": {
"method": "GET",
"url": "https://example.com/prices",
"unblocker": true
}
}'
問題が解決しない場合は、maxTriesを増やしてproxyローテーションの試行回数を増やしてください。
タイムアウトエラー
症状: リクエストがタイムアウトエラーで失敗します。
原因: 対象のページのロードに、設定されたタイムアウト以上の時間がかかっています。
解決策: timeout_msを増やします(デフォルトはsingleが15秒、browserが30秒、proxyが45秒です):
curl -X POST https://eu.api.foura.ai/api/browser/ \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://slow-site.com",
"timeout_ms": 60000
}'
browserリクエストの場合は、checkTextの値が実際にページ上に表示されていることも確認してください。タイポがあると、常にタイムアウトが発生します。
429 Too Many Requests (RPM制限)
症状: APIが429ステータスと「rate limit exceeded」メッセージを返します。
原因: 1分あたりのリクエスト数(RPM)制限を超過しました。これは同時実行数制限(以下の503を参照)とは異なります。
解決策: レスポンスのretryAfterフィールドを使用して、適切な時間待機してから再試行してください:
import time
import requests
def make_request(endpoint_url, payload, retries=3):
for i in range(retries):
resp = requests.post(
endpoint_url,
headers={"X-API-Key": "YOUR_API_KEY", "Content-Type": "application/json"},
json=payload
)
if resp.status_code == 429:
body = resp.json()
wait = body.get("retryAfter", 2 ** i)
time.sleep(wait)
continue
return resp
raise Exception("Rate limit not resolved after retries")
# Example: single request
make_request(
"https://eu.api.foura.ai/api/single/",
{"method": "GET", "url": "https://example.com"}
)
Dashboardで現在の使用状況を確認し、rate limitを確認してください。
503 Service Unavailable
症状: APIが503ステータスを返します。
原因: これは次の2つのケースで発生します。
- 同時実行数制限への到達。 同時に実行されているリクエストが多すぎます。これは、1分あたりのリクエスト数を制限する429とは異なります。503の場合、RPMは超過していませんが、同時に実行できるリクエスト数が上限に達しています。
- サービスの一時的な停止。 メンテナンスが実施されています。
どちらのケースでも、レスポンスにretryAfterフィールドが含まれます。
解決策: retryAfter秒間待機してから、再試行してください:
import time
import requests
def make_request_with_retry(endpoint_url, payload, retries=3):
for i in range(retries):
resp = requests.post(
endpoint_url,
headers={"X-API-Key": "YOUR_API_KEY", "Content-Type": "application/json"},
json=payload
)
if resp.status_code in (429, 503):
body = resp.json()
wait = body.get("retryAfter", 2 ** i)
time.sleep(wait)
continue
return resp
raise Exception("Request not resolved after retries")
503の同時実行数制限に頻繁に達する場合は、スクレイピングパイプライン内の並行リクエスト数を減らすか、Dashboardでプランの同時実行数制限を確認してください。
401 Authenticationエラー
症状: すべてのリクエストが401 Unauthorizedを返します。
チェックリスト:
- headerが
X-API-Key: YOUR_API_KEYであることを確認してください(Authorization: BearerやApi-Keyではありません) - API keyに余分な空白や改行が含まれていないか確認してください
- 現在のキーが漏洩した可能性がある場合は、Dashboardから新しいキーを作成してください
JSONではなく予期しないHTMLが返される場合
症状: 対象サイトからJSONを期待していましたが、HTMLを受信しました。
原因: 対象ページが、headersに基づいて異なるコンテンツを返している可能性があります。
解決策: Accept headerを追加し、現実的なブラウザheadersを適用するためにunblockerを有効にします:
curl -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://api.example.com/data",
"headers": [["Accept", "application/json"]],
"unblocker": true
}'
tryJsonDataをtrueに設定して、FourAにJSONレスポンスを自動的にパースさせることもできます。
解決しない場合
上記の解決策のいずれも機能しない場合:
- ステータスページで現在発生しているインシデントを確認してください
- Dashboardでリクエストのメトリクスを確認してください
- リクエストの詳細を添えて、support@foura.aiまでサポートにお問い合わせください
次のステップ
- エラーハンドリング: APIエラーコードのリファレンス
- 適切なエンドポイントの選択: 対象に最適なアプローチを選択する
- ダッシュボードの概要: リクエストを監視する