title: "Claude Code WebFetch 报错:别被错误信息误导了"
description: "Analyse des erreurs Claude Code WebFetch : pourquoi le message d'erreur est trompeur et comment résoudre les problèmes de preflight."
Lorsque vous demandez à Claude Code de récupérer
http://www.weather.com.cn, vous obtenez 5 fois de suite la même erreur en rouge :Unable to verify if domain www.weather.com.cn is safe to fetch. This may be due to network restrictions or enterprise security policies blocking claude.ai.Cela ressemble à un problème de "réseau/pare-feu bloquant claude.ai", mais la réalité est tout autre — ce message d'erreur induit gravement en erreur les utilisateurs et les équipes d'exploitation.
Cet article décortique systématiquement la cause profonde de l'erreur Claude Code WebFetch, en s'appuyant sur les issues GitHub officielles d'Anthropic, la documentation de configuration réseau de Claude Code et les tests de la communauté. Nous proposons un plan de dépannage progressif en 4 étapes. À la fin, vous trouverez les meilleures pratiques pour les utilisateurs utilisant Claude Code via APIYI (apiyi.com) : APIYI gère uniquement le transfert d'API, les problèmes de preflight de WebFetch nécessitent une combinaison de proxy et de configuration.
La cause réelle de l'erreur Claude Code WebFetch
Avant de modifier votre configuration, comprenons ce que dit réellement ce message d'erreur. L'erreur Claude Code WebFetch est un cas classique où l'on "confond un rhume avec un cancer".
La vérité derrière le message d'erreur
Avant d'exécuter toute invocation WebFetch, Claude Code effectue une "vérification de sécurité du domaine" (preflight) : il envoie une requête HTTP à https://claude.ai/code/ pour demander "si ce domaine peut être récupéré". Le problème survient précisément à cette étape :
| Étape | Ce qui se passe réellement |
|---|---|
| ① Déclenchement de WebFetch par Claude Code | Le processus CLI prépare le fetch de l'URL cible |
| ② Requête de Preflight | Envoi d'une requête HTTP à https://claude.ai/code/ |
| ③ Blocage par la protection Bot de Cloudflare | Retour 403 + cf-mitigated: challenge + JS Challenge |
| ④ Environnement CLI sans navigateur | Impossible d'exécuter le défi JavaScript |
| ⑤ Échec du Preflight | Erreur "Unable to verify if domain is safe" |
| ⑥ L'URL cible n'a jamais été visitée | Votre capacité réseau à accéder à weather.com.cn n'a aucune importance |
En d'autres termes, la possibilité d'atteindre le site cible n'a même pas été testée — la requête échoue dès la deuxième étape. La mention "enterprise security policies blocking claude.ai" dans le message d'erreur est vraie, mais la "politique d'entreprise" n'est pas celle de votre service informatique, c'est la règle de protection Cloudflare déployée par Anthropic devant claude.ai.
🎯 Point clé à retenir : Il s'agit d'un problème de conception architecturale, confirmé dans l'issue GitHub officielle d'Anthropic #39896. Cela affecte tous les environnements headless — CI/CD, conteneurs Docker, WSL, sessions SSH, déploiements Bedrock, etc. C'est la même chose lorsque vous utilisez APIYI (apiyi.com) pour transférer les appels API, car le preflight est envoyé à claude.ai et non à api.anthropic.com.
Trois scénarios d'échec typiques
Selon votre environnement réseau, cette erreur peut être causée par différents facteurs cumulés :
| Scénario | Site cible | État du proxy | Cause profonde |
|---|---|---|---|
| A. Machine locale + sans proxy | N'importe quel site étranger | Aucun proxy | Échec de connexion directe à claude.ai + échec du preflight |
| B. Machine locale + avec proxy | Site local (weather.com.cn) | Proxy vers l'étranger | Le preflight passe par le proxy vers claude.ai, mais peut toujours être défié par Cloudflare |
| C. Machine à l'étranger + sans proxy | N'importe quel site | Aucun proxy nécessaire | Cloudflare identifie la CLI comme un bot, échec du preflight |
Dans la capture d'écran, l'utilisateur qui fait un fetch sur www.weather.com.cn appartient au scénario B — il semble que "le site local devrait être accessible", mais en réalité, c'est le preflight vers claude.ai qui pose problème, sans aucun rapport avec le site cible.
Une fois la cause profonde identifiée, nous procédons à un dépannage couche par couche, en suivant l'ordre de l'impact croissant.
Niveau 1 : Proxy et variables d'environnement NO_PROXY
C'est le premier obstacle courant pour les utilisateurs en Chine. Claude Code respecte les variables d'environnement de proxy standard, lues dans cet ordre de priorité :
https_proxy > HTTPS_PROXY > http_proxy > HTTP_PROXY
Configuration minimale pour macOS / Linux :
# ~/.zshrc ou ~/.bashrc
export HTTPS_PROXY=http://127.0.0.1:7890
export HTTP_PROXY=http://127.0.0.1:7890
export NO_PROXY="localhost,127.0.0.1,::1,api.apiyi.com,vip.apiyi.com"
Pour Windows PowerShell :
$env:HTTPS_PROXY = "http://127.0.0.1:7890"
$env:HTTP_PROXY = "http://127.0.0.1:7890"
$env:NO_PROXY = "localhost,127.0.0.1,api.apiyi.com,vip.apiyi.com"
Vous pouvez également l'ajouter directement dans le bloc env du fichier ~/.claude/settings.json :
{
"env": {
"HTTPS_PROXY": "http://127.0.0.1:7890",
"HTTP_PROXY": "http://127.0.0.1:7890",
"NO_PROXY": "localhost,127.0.0.1,api.apiyi.com,vip.apiyi.com"
}
}
⚠️ Détail crucial : Vous devez ajouter les domaines de service proxy API d'APIYI (
api.apiyi.com/vip.apiyi.com) àNO_PROXY! Sinon, l'invocation du modèle par Claude Code passera par le proxy, ce qui ralentira les échanges et risque une interception par le nœud de proxy. Nous recommandons de laisser l'API passer parNO_PROXYpour une connexion directe à APIYI, et de laisser le preflight de WebFetch passer par le proxy pour accéder à claude.ai : séparer ces deux flux est la configuration la plus stable.
Proxy avec authentification de base (courant en entreprise) :
export HTTPS_PROXY=http://username:[email protected]:8080
Note : Claude Code ne prend pas en charge les proxys SOCKS — si votre proxy n'est qu'en mode SOCKS, utilisez privoxy ou v2ray pour convertir SOCKS en HTTP.
Niveau 2 : Pré-autorisation des permissions WebFetch(domain:xxx)
Parfois, le preflight fonctionne, mais Claude Code demande systématiquement "Autoriser l'accès à ce domaine ?". Ajoutez les domaines fréquemment utilisés à permissions.allow pour éviter ces sollicitations :
{
"permissions": {
"allow": [
"WebFetch(domain:www.weather.com.cn)",
"WebFetch(domain:github.com)",
"WebFetch(domain:developer.mozilla.org)",
"WebFetch(domain:docs.python.org)"
],
"ask": [
"WebFetch"
]
}
}
Aide-mémoire pour la syntaxe des règles :
| Syntaxe | Portée |
|---|---|
WebFetch |
Toutes les invocations WebFetch |
WebFetch(domain:example.com) |
Uniquement example.com |
WebFetch(domain:*.example.com) |
Tous les sous-domaines de example.com |
WebFetch(domain:*) |
N'importe quel domaine (équivalent à tout autoriser) |
🎯 Conseil de gestion : En entreprise, nous recommandons d'utiliser
managed-settings.jsonpour définir une liste blanche de domaines autorisés, située dans/Library/Application Support/ClaudeCode/managed-settings.json(macOS) ou/etc/claude-code/managed-settings.json(Linux), couplée àallowManagedPermissionRulesOnly: truepour forcer le respect des règles par tous les développeurs. Les équipes de développement qui utilisent l'API Claude via APIYI (apiyi.com) peuvent appliquer la même stratégie pour garantir une cohérence entre les politiques de permissions de Claude Code et celles de l'invocation du modèle en backend.
Niveau 3 : Certificats CA d'entreprise et interception TLS
Si votre entreprise utilise des produits de sécurité avec interception TLS comme Zscaler / CrowdStrike / Cato Networks, ils réémettent des certificats HTTPS, ce qui provoque des erreurs SSL comme UNABLE_TO_GET_ISSUER_CERT dans l'environnement d'exécution Node.js de Claude Code.
Solution : Exportez le certificat racine CA de l'entreprise et pointez vers lui :
export NODE_EXTRA_CA_CERTS=/path/to/company-root-ca.pem
Ou ajoutez-le dans ~/.claude/settings.json :
{
"env": {
"NODE_EXTRA_CA_CERTS": "/Users/you/certs/company-root-ca.pem",
"CLAUDE_CODE_CERT_STORE": "bundled,system"
}
}
Valeurs possibles pour CLAUDE_CODE_CERT_STORE :
| Valeur | Signification |
|---|---|
bundled |
Fait uniquement confiance aux CA Mozilla fournis avec Claude Code |
system |
Fait uniquement confiance au magasin de certificats du système d'exploitation |
bundled,system (par défaut) |
Fait confiance aux deux |
Authentification mutuelle mTLS (environnements d'entreprise stricts) :
export CLAUDE_CODE_CLIENT_CERT=/path/to/client-cert.pem
export CLAUDE_CODE_CLIENT_KEY=/path/to/client-key.pem
export CLAUDE_CODE_CLIENT_KEY_PASSPHRASE="votre-phrase-secrete"
Niveau 4 : Contourner WebFetch avec Bash curl ou MCP
Si les trois niveaux précédents ne résolvent pas le problème, la méthode la plus fiable est de ne pas utiliser WebFetch — demandez à Claude d'utiliser directement curl via l'outil Bash, ou connectez un serveur MCP fetch tiers.
Option A : Autoriser Bash à utiliser curl/wget
{
"permissions": {
"allow": [
"Bash(curl:*)",
"Bash(wget:*)"
]
}
}
Ensuite, demandez simplement à Claude dans la conversation : "Utilise curl pour récupérer le contenu de la page d'accueil de www.weather.com.cn" — il ignorera WebFetch et passera par Bash. Ce chemin ne déclenche absolument aucun preflight, la configuration du proxy doit simplement permettre l'accès au site cible.
Option B : Connecter fetch-mcp ou Playwright MCP
# Installer le serveur MCP fetch tiers
claude mcp add fetch npx -- @modelcontextprotocol/server-fetch
Les requêtes réseau des outils MCP sont initiées par le processus du serveur MCP lui-même, sans passer par la chaîne de preflight de Claude Code, ce qui améliore considérablement la stabilité. Pour les sites dynamiques nécessitant l'exécution de JavaScript, Playwright MCP est plus approprié.
Études de cas pratiques sur le dépannage de Claude Code WebFetch
Maintenant que la théorie est posée, examinons les processus de résolution complets pour trois scénarios réels.
Scénario 1 : MacBook en Chine tentant de récupérer weather.com.cn (scénario de capture d'écran)
Symptôme : La commande fetch sur www.weather.com.cn renvoie continuellement "Unable to verify".
Étapes de dépannage :
# Étape 1 : Vérifier l'état du proxy
echo $HTTPS_PROXY # Devrait afficher quelque chose comme http://127.0.0.1:7890
# Étape 2 : Vérifier manuellement si claude.ai est accessible
curl -I https://claude.ai/code/ -x http://127.0.0.1:7890
# Si cela renvoie 403 + cf-mitigated, Cloudflare bloque, passez à l'étape 3
# Si cela renvoie 200, le preflight fonctionne, vérifiez les permissions
# Étape 3 : Changer de stratégie dans Claude Code — utiliser Bash + curl
# Dites directement dans la conversation :
# "N'utilise pas WebFetch, utilise curl pour récupérer la page d'accueil de http://www.weather.com.cn"
Configuration finale (~/.claude/settings.json) :
{
"env": {
"HTTPS_PROXY": "http://127.0.0.1:7890",
"HTTP_PROXY": "http://127.0.0.1:7890",
"NO_PROXY": "localhost,127.0.0.1,api.apiyi.com,vip.apiyi.com"
},
"permissions": {
"allow": [
"WebFetch(domain:www.weather.com.cn)",
"Bash(curl:*)",
"Bash(wget:*)"
]
}
}
🎯 Conseil pratique en Chine : La combinaison la plus stable pour les utilisateurs locaux est : « API via APIYI apiyi.com + WebFetch via proxy + fallback sur curl si nécessaire ». En ajoutant la
base_urld'APIYI àNO_PROXY, les requêtes API de Claude Code ne sont pas détournées par le proxy, garantissant une latence et une stabilité identiques à une connexion directe à l'étranger.
Scénario 2 : Machine d'entreprise + interception TLS Zscaler
Symptôme : WebFetch renvoie SELF_SIGNED_CERT_IN_CHAIN ou UNABLE_TO_VERIFY_LEAF_SIGNATURE.
Solution :
# Étape 1 : Récupérer le certificat racine CA de l'entreprise auprès de l'IT (généralement .pem ou .crt)
# Étape 2 : Configurer Claude Code pour faire confiance à ce CA
export NODE_EXTRA_CA_CERTS=~/certs/company-zscaler-root.pem
# Étape 3 : Faire confiance simultanément au magasin de certificats système (Zscaler y est généralement déjà injecté)
export CLAUDE_CODE_CERT_STORE=bundled,system
# Étape 4 : Redémarrer Claude Code
Scénario 3 : Exécution headless dans Docker / CI
Symptôme : Fonctionne en local, mais WebFetch échoue à 100 % en CI.
Cause : Le conteneur ne dispose ni de proxy ni de navigateur, et la protection bot de Cloudflare identifie directement le client CLI et refuse la connexion.
Solution : Désactiver WebFetch et forcer l'utilisation de Bash dans la CI :
# .github/workflows/claude.yml ou similaire
env:
CLAUDE_CODE_DISABLE_WEBFETCH: "true" # Si cette variable d'environnement est prise en compte
Ou via les paramètres de lancement --disallowedTools :
claude --disallowedTools WebFetch --allowedTools "Bash(curl:*)"
🎯 Conseil d'intégration CI : Dans un environnement conteneurisé, dirigez la clé API vers le nœud de service proxy API stable d'APIYI (apiyi.com) pour éviter les échecs de CI dus aux instabilités réseau internationales. Nous recommandons de configurer
ANTHROPIC_BASE_URL=https://vip.apiyi.com+ANTHROPIC_API_KEY=sk-xxxdans les secrets de GitHub Actions / GitLab CI. Avec la stratégie de désactivation de WebFetch, la stabilité des tâches Claude Code en CI peut atteindre plus de 99 %.
Meilleures pratiques d'ingénierie pour les erreurs WebFetch de Claude Code
Il est facile de faire fonctionner une démo ponctuelle, mais pour garantir une utilisation stable de Claude Code par toute l'équipe, voici quelques points clés.
Pratique 1 : Un fichier managed-settings.json unifié
Distribuez un managed-settings.json unifié à l'équipe pour éviter que chacun ne doive tâtonner de son côté :
{
"env": {
"HTTPS_PROXY": "http://corp-proxy:8080",
"NODE_EXTRA_CA_CERTS": "/opt/company/ca.pem",
"NO_PROXY": "*.corp.example.com,api.apiyi.com,vip.apiyi.com"
},
"permissions": {
"allow": [
"WebFetch(domain:*.corp.example.com)",
"WebFetch(domain:github.com)",
"WebFetch(domain:stackoverflow.com)",
"Bash(curl:*)"
],
"deny": [
"WebFetch(domain:*)"
]
},
"allowManagedPermissionRulesOnly": true
}
Emplacement du fichier :
| Plateforme | Chemin |
|---|---|
| macOS | /Library/Application Support/ClaudeCode/managed-settings.json |
| Linux | /etc/claude-code/managed-settings.json |
| Windows | C:\ProgramData\ClaudeCode\managed-settings.json |
Pratique 2 : Stratégie de fallback à trois niveaux
Définissez clairement la priorité de sélection des outils dans CLAUDE.md pour que Claude les essaie dans l'ordre :
## Priorité des outils de web scraping
1. Priorité à WebFetch (domaines pré-autorisés)
2. En cas d'échec de WebFetch, basculer sur `curl` via Bash
3. Pour les sites dynamiques, utiliser Playwright MCP
4. Ne jamais utiliser `curl -k` pour ignorer les erreurs de certificat
Une fois cette configuration ajoutée au fichier CLAUDE.md, Claude basculera automatiquement sur curl lorsqu'il rencontrera une erreur avec WebFetch, ce qui améliore considérablement l'expérience utilisateur.
### Pratique n°3 : Script de diagnostic "preflight"
Voici un script de diagnostic rapide à exécuter en cas de problème :
```bash
#!/bin/bash
# claude-code-doctor.sh
echo "=== Variables d'environnement ==="
env | grep -iE "proxy|claude_code|node_extra"
echo "=== Test preflight claude.ai ==="
curl -sI -o /dev/null -w "HTTP %{http_code} · %{time_total}s\n" \
https://claude.ai/code/
echo "=== Test api.anthropic.com ==="
curl -sI -o /dev/null -w "HTTP %{http_code} · %{time_total}s\n" \
https://api.anthropic.com/
echo "=== Test du service proxy APIYI ==="
curl -sI -o /dev/null -w "HTTP %{http_code} · %{time_total}s\n" \
https://vip.apiyi.com/
echo "=== Résolution DNS ==="
nslookup claude.ai
Si claude.ai/code/ renvoie une erreur 403 avec l'en-tête cf-mitigated, il s'agit d'un problème classique de preflight Cloudflare. Passez directement à la solution de niveau 4.
🎯 Conseil de diagnostic : 80 % des problèmes liés à Claude Code peuvent être résolus grâce à ce script. Pour les utilisateurs en Chine, nous recommandons d'ajouter
vip.apiyi.comà votre liste de vérification. Si APIYI est accessible mais que le site officiel d'Anthropic ne l'est pas, utilisez le service proxy APIYI (apiyi.com) pour poursuivre votre travail sans bloquer votre flux de développement.
FAQ sur les erreurs WebFetch de Claude Code
Q1 : Pourquoi le message d'erreur indique-t-il "enterprise security policies blocking claude.ai" alors que mon entreprise n'a installé aucun logiciel de sécurité ?
Ce message d'erreur d'Anthropic est imprécis. Ce qui bloque réellement, c'est la protection anti-bot Cloudflare devant claude.ai. Cloudflare identifie le processus CLI comme un bot et renvoie un "JS Challenge" que la CLI ne peut pas résoudre. Cela n'a généralement rien à voir avec la politique informatique de votre entreprise.
Q2 : Le service proxy APIYI peut-il résoudre les erreurs WebFetch ?
Partiellement. APIYI (apiyi.com) gère uniquement le transfert des requêtes API vers api.anthropic.com. Les conversations et les décisions d'invocation du modèle fonctionnent parfaitement. Cependant, le preflight de WebFetch cible claude.ai (et non api.anthropic.com), un chemin que APIYI ne couvre pas. Il est recommandé de combiner les deux : utilisez APIYI pour l'API et un proxy local pour le preflight.
Q3 : Existe-t-il une option de configuration skipWebFetchPreflight ?
Le sujet est débattu dans la communauté, mais à ce jour (avril 2026), rien n'est documenté officiellement. L'issue GitHub #39896 mentionne cette attente. En attendant un support officiel, la solution de niveau 4 (Bash curl + domaines pré-autorisés) reste la méthode la plus fiable et contrôlable.
Q4 : J'ai activé le proxy global Clash, pourquoi WebFetch affiche-t-il toujours des erreurs ?
Le mode proxy global de Clash ne définit pas automatiquement les variables d'environnement. Claude Code est un processus Node.js CLI qui ne lit que les variables comme HTTPS_PROXY et ne détecte pas les paramètres de proxy système. Vous devez exporter explicitement les variables de proxy dans votre profil shell ou les ajouter dans le bloc env du fichier ~/.claude/settings.json.
Q5 : WebFetch réussit, mais le résultat est incomplet (tronqué) ?
C'est dû à la limite max_content_tokens de Claude Code. Elle ne peut pas être ajustée via les règles de permission, mais si vous appelez l'outil web_fetch directement via l'API Claude (hors CLI), vous pouvez définir "max_content_tokens": 100000 pour augmenter la capacité de capture. Dans ce cas, l'utilisation d'APIYI (apiyi.com) pour l'API offre une plus grande flexibilité.
Q6 : Peut-on éviter totalement les erreurs en désactivant WebFetch ?
Oui. Ajoutez ce paramètre au démarrage :
claude --disallowedTools WebFetch
Ou dans settings.json :
{
"permissions": {
"deny": ["WebFetch"]
}
}
En autorisant Bash(curl:*), Claude basculera automatiquement sur curl, ce qui offre souvent une meilleure expérience.
Q7 : Comment configurer Claude Code dans GitHub Actions / GitLab CI ?
Dans un conteneur CI, il est fortement recommandé de désactiver WebFetch, car l'environnement sans navigateur fera presque systématiquement échouer le preflight. Dirigez également les requêtes API vers le nœud stable d'APIYI (apiyi.com) :
env:
ANTHROPIC_BASE_URL: https://vip.apiyi.com
ANTHROPIC_API_KEY: ${{ secrets.APIYI_KEY }}
CLAUDE_CODE_DISALLOWED_TOOLS: "WebFetch"
Résumé des erreurs Claude Code WebFetch et liste d'actions
Pour faire le point, l'erreur Claude Code WebFetch est fondamentalement liée aux limitations de conception du preflight Cloudflare + l'absence de navigateur dans l'interface CLI. Ce n'est pas un problème lié à votre réseau ou à vos politiques informatiques. En résumé :
✅ La stratégie gagnante pour les utilisateurs en Chine : Utilisez le service proxy API APIYI (apiyi.com) pour une connexion directe + un proxy local pour le preflight de claude.ai + Bash curl comme solution de repli (fallback). Cela permet de contourner 90 % des erreurs WebFetch.
Liste d'actions à mettre en œuvre
Suivez ces 5 étapes par ordre de priorité :
- Configuration du proxy : Définissez
HTTPS_PROXY+HTTP_PROXY, et ajoutez le domaine APIYI àNO_PROXY. - Pré-autorisation des domaines : Ajoutez les sites fréquemment consultés dans
permissions.allowviaWebFetch(domain:...). - Gestion des certificats CA d'entreprise : Si vous êtes dans un environnement Zscaler/CrowdStrike, configurez
NODE_EXTRA_CA_CERTS. - Préparation du fallback : Autorisez
Bash(curl:*)pour permettre à Claude de basculer automatiquement en cas de blocage. - Script de diagnostic : Intégrez
claude-code-doctor.shà votre chaîne d'outils d'équipe.
🎯 Dernier conseil : Les problèmes réseau de Claude Code sont un système complexe à plusieurs niveaux — proxy, certificats, règles de permission et priorité des outils sont tous indispensables. Nous vous recommandons de commencer par établir le chemin d'invocation du modèle via APIYI (apiyi.com), car c'est la partie dont le SLA est le plus contrôlable, puis de traiter couche par couche les problèmes de preflight et de certificat CA de WebFetch. La plateforme prend en charge toute la gamme des modèles Claude + les outils natifs, ce qui facilite la vérification rapide de l'efficacité de chaque configuration.
Auteur : Équipe technique APIYI | Pour plus de tutoriels pratiques sur Claude Code, visitez help.apiyi.com