Когда вы просите Claude Code выполнить fetch для http://www.weather.com.cn, и пять раз подряд получаете одну и ту же красную ошибку: 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., кажется, что «сеть или файрвол блокируют claude.ai». Но на самом деле всё иначе — это сообщение об ошибке сильно вводит в заблуждение как пользователей, так и системных администраторов.

В этой статье мы разберем реальную причину ошибки Claude Code WebFetch, опираясь на официальные GitHub issues Anthropic, документацию по настройке сети Claude Code и результаты тестов сообщества. Мы предложим пошаговый план устранения неполадок. В конце статьи — лучшие практики для пользователей, работающих с Claude Code через APIYI (apiyi.com): APIYI отвечает только за пересылку API, а проблему с preflight-запросами WebFetch нужно решать через настройку прокси.
Реальная причина ошибки Claude Code WebFetch
Прежде чем менять конфиги, давайте разберемся, что на самом деле означает это сообщение. Ошибка Claude Code WebFetch — это классический случай, когда «лечат простуду, а думают, что это рак».
Истина за сообщением об ошибке
Перед выполнением любого вызова WebFetch Claude Code сначала проводит «проверку безопасности домена» (preflight): отправляет HTTP-запрос на https://claude.ai/code/ с вопросом: «Можно ли парсить этот домен?». Проблема кроется именно здесь:
| Этап | Что происходит на самом деле |
|---|---|
| ① Claude Code запускает WebFetch | Процесс CLI готовится к fetch целевого URL |
| ② Preflight-запрос | Отправляется HTTP-запрос на https://claude.ai/code/ |
| ③ Блокировка Cloudflare Bot | Возвращается 403 + cf-mitigated: challenge + JS Challenge |
| ④ Нет среды браузера в CLI | Невозможно выполнить JavaScript-челлендж |
| ⑤ Ошибка Preflight | Выводится "Unable to verify if domain is safe" |
| ⑥ Целевой URL даже не запрашивался | Доступность weather.com.cn вообще не при чем |
Иными словами, доступность целевого сайта даже не проверялась — запрос «отваливается» еще на втором этапе. Фраза в сообщении об ошибке про «enterprise security policies blocking claude.ai» правдива, но «корпоративная политика» — это не настройки вашего IT-отдела, а правила защиты Cloudflare, развернутые самой Anthropic перед claude.ai.
🎯 Главное: Это архитектурная проблема, подтвержденная в официальном GitHub issue #39896. Она затрагивает все headless-среды: CI/CD, Docker-контейнеры, WSL, SSH-сессии, развертывания через Bedrock. При использовании API-прокси, такого как APIYI (apiyi.com), ситуация аналогичная, так как preflight-запрос идет на claude.ai, а не на api.anthropic.com.
Три типичных сценария сбоя
В зависимости от вашей сетевой среды, эта ошибка может быть вызвана разными факторами:
| Сценарий | Целевой сайт | Статус прокси | Причина |
|---|---|---|---|
| A. Локальная машина + без прокси | Любой зарубежный сайт | Нет прокси | Прямое подключение к claude.ai падает + сбой preflight |
| B. Локальная машина + с прокси | Локальный сайт (weather.com.cn) | Прокси на зарубеж | Preflight идет через прокси к claude.ai, но все равно ловит челлендж Cloudflare |
| C. Зарубежный сервер + без прокси | Любой сайт | Не нужен | Cloudflare распознает CLI как бота, сбой preflight |
Случай пользователя на скриншоте с www.weather.com.cn относится к сценарию B — кажется, что «локальный сайт должен открываться», но на самом деле проблема в preflight-запросе к claude.ai, который не имеет никакого отношения к целевому сайту.
4 уровня диагностики ошибок Claude Code WebFetch
Разобравшись с первопричинами, давайте пройдемся по уровням диагностики, двигаясь от частного к общему.

Уровень 1: Прокси и переменная окружения NO_PROXY
Это первое препятствие, с которым сталкиваются пользователи. Claude Code следует стандартным переменным окружения для прокси в следующем порядке приоритета:
https_proxy > HTTPS_PROXY > http_proxy > HTTP_PROXY
Минимальная конфигурация для macOS / Linux:
# ~/.zshrc или ~/.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"
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"
Также можно прописать это напрямую в блок env файла ~/.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"
}
}
⚠️ Важный нюанс: В
NO_PROXYобязательно нужно добавить домены сервиса-прокси APIYI (api.apiyi.com/vip.apiyi.com)! Иначе вызов модели Claude Code пойдет через прокси, что не только замедлит работу, но и может привести к перехвату трафика прокси-узлом. Мы рекомендуем пускать API напрямую через NO_PROXY к APIYI, а preflight для WebFetch — через прокси к claude.ai. Разделение этих путей — самый надежный вариант.
Прокси с базовой аутентификацией (часто встречается в корпоративных сетях):
export HTTPS_PROXY=http://username:[email protected]:8080
Внимание: Claude Code не поддерживает SOCKS-прокси. Если у вас прокси только в режиме SOCKS, используйте privoxy или v2ray для конвертации SOCKS в HTTP.
Уровень 2: Преавторизация разрешений WebFetch(domain:xxx)
Иногда preflight проходит успешно, но Claude Code продолжает каждый раз спрашивать: "Разрешить доступ к этому домену?". Добавьте нужные домены в permissions.allow, и Claude перестанет вас беспокоить:
{
"permissions": {
"allow": [
"WebFetch(domain:www.weather.com.cn)",
"WebFetch(domain:github.com)",
"WebFetch(domain:developer.mozilla.org)",
"WebFetch(domain:docs.python.org)"
],
"ask": [
"WebFetch"
]
}
}
Краткий справочник синтаксиса правил:
| Правило | Область действия |
|---|---|
WebFetch |
Все вызовы WebFetch |
WebFetch(domain:example.com) |
Только example.com |
WebFetch(domain:*.example.com) |
Все поддомены example.com |
WebFetch(domain:*) |
Любой домен (полный доступ) |
🎯 Совет по управлению: В корпоративной среде рекомендуется использовать
managed-settings.jsonдля создания белого списка доменов. Разместите его в/Library/Application Support/ClaudeCode/managed-settings.json(macOS) или/etc/claude-code/managed-settings.json(Linux) и используйтеallowManagedPermissionRulesOnly: true, чтобы принудительно соблюдать правила для всех разработчиков. Команды, использующие API Claude через APIYI (apiyi.com), могут применять те же правила, чтобы обеспечить единообразие политик доступа для Claude Code и бэкенд-вызовов модели.
Уровень 3: Корпоративные CA-сертификаты и TLS-инспекция
Если в вашей компании используются продукты для TLS-инспекции, такие как Zscaler / CrowdStrike / Cato Networks, они перевыпускают HTTPS-сертификаты. Это приводит к тому, что среда выполнения Node.js в Claude Code выдает SSL-ошибки типа UNABLE_TO_GET_ISSUER_CERT.
Решение: Экспортируйте корневой CA-сертификат компании и укажите путь к нему:
export NODE_EXTRA_CA_CERTS=/path/to/company-root-ca.pem
Или добавьте в ~/.claude/settings.json:
{
"env": {
"NODE_EXTRA_CA_CERTS": "/Users/you/certs/company-root-ca.pem",
"CLAUDE_CODE_CERT_STORE": "bundled,system"
}
}
Возможные значения CLAUDE_CODE_CERT_STORE:
| Значение | Описание |
|---|---|
bundled |
Доверять только набору Mozilla CA, встроенному в Claude Code |
system |
Доверять только системному хранилищу сертификатов |
bundled,system (по умолчанию) |
Доверять обоим |
mTLS (двусторонняя аутентификация) (для строгих корпоративных сред):
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="your-passphrase"
Уровень 4: Обход WebFetch через Bash curl или MCP
Если предыдущие три уровня не помогли, самый надежный способ — не использовать WebFetch. Позвольте Claude использовать Bash-инструмент для прямого curl или подключите сторонний MCP-сервер для fetch.
Вариант А: Разрешить Bash использовать curl/wget
{
"permissions": {
"allow": [
"Bash(curl:*)",
"Bash(wget:*)"
]
}
}
Затем в чате попросите Claude: "Пожалуйста, получи содержимое главной страницы www.weather.com.cn с помощью curl". Он пропустит WebFetch и выполнит запрос через Bash. Этот путь вообще не вызывает preflight, главное — чтобы целевой сайт был доступен через ваш прокси.
Вариант Б: Подключение fetch-mcp или Playwright MCP
# Установка стороннего fetch MCP-сервера
claude mcp add fetch npx -- @modelcontextprotocol/server-fetch
Сетевые запросы через MCP-инструменты инициируются самим процессом MCP-сервера и не проходят через цепочку preflight в Claude Code, что значительно повышает стабильность. Для динамических сайтов, требующих выполнения JavaScript, лучше подойдет Playwright MCP.

Практические кейсы по устранению неполадок с Claude Code WebFetch
Теорию разобрали, теперь давайте посмотрим на полный процесс решения проблем в трех реальных сценариях.
Сценарий 1: Парсинг weather.com.cn на MacBook в Китае (сценарий со скриншотами)
Симптом: при попытке fetch сайта www.weather.com.cn постоянно вылетает ошибка Unable to verify.
Шаги по диагностике:
# Шаг 1: Проверяем статус прокси
echo $HTTPS_PROXY # Должен вывести что-то вроде http://127.0.0.1:7890
# Шаг 2: Вручную проверяем доступность claude.ai
curl -I https://claude.ai/code/ -x http://127.0.0.1:7890
# Если вернулся 403 + cf-mitigated, значит Cloudflare блокирует запрос, переходим к Шагу 3
# Если вернулся 200, значит preflight проходит, проверяем permissions
# Шаг 3: Переключаем стратегию в Claude Code — используем Bash + curl
# Прямо в чате пишем:
# "Не используй WebFetch, используй curl для получения главной страницы http://www.weather.com.cn"
Итоговая конфигурация (~/.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:*)"
]
}
}
🎯 Совет для работы в Китае: Самая надежная связка для локальных пользователей — это «API через сервис-прокси APIYI (apiyi.com) + WebFetch через прокси + fallback на curl при необходимости». Добавление
base_urlот APIYI вNO_PROXYгарантирует, что API-запросы Claude Code не будут идти в обход через прокси, что обеспечивает такую же задержку и стабильность, как при прямом подключении из-за рубежа.
Сценарий 2: Корпоративная сеть + TLS-инспекция Zscaler
Симптом: WebFetch выдает SELF_SIGNED_CERT_IN_CHAIN или UNABLE_TO_VERIFY_LEAF_SIGNATURE.
Решение:
# Шаг 1: Получите у IT-отдела корневой CA-сертификат компании (обычно .pem или .crt)
# Шаг 2: Настройте Claude Code на доверие этому CA
export NODE_EXTRA_CA_CERTS=~/certs/company-zscaler-root.pem
# Шаг 3: Дополнительно доверяем системному хранилищу сертификатов (Zscaler обычно уже внедрен туда)
export CLAUDE_CODE_CERT_STORE=bundled,system
# Шаг 4: Перезапустите Claude Code
Сценарий 3: Запуск в headless-режиме внутри Docker / CI
Симптом: локально все работает, в CI WebFetch падает в 100% случаев.
Причина: в контейнере нет ни прокси, ни браузера, и защита Cloudflare от ботов распознает CLI-клиент и блокирует соединение.
Решение: в CI отключите WebFetch и принудительно используйте Bash:
# .github/workflows/claude.yml или аналогичный файл
env:
CLAUDE_CODE_DISABLE_WEBFETCH: "true" # если эта переменная окружения поддерживается
Или через аргументы запуска --disallowedTools:
claude --disallowedTools WebFetch --allowedTools "Bash(curl:*)"
🎯 Совет по CI-интеграции: В контейнеризированной среде направляйте API-ключ на стабильные узлы-посредники APIYI (apiyi.com), чтобы избежать сбоев CI из-за сетевых колебаний при обращении к зарубежным серверам. Мы рекомендуем прописать в secrets GitHub Actions / GitLab CI параметры
ANTHROPIC_BASE_URL=https://vip.apiyi.comиANTHROPIC_API_KEY=sk-xxx. В сочетании с политикой отключения WebFetch это позволит добиться стабильности задач Claude Code в CI выше 99%.
Инженерные практики при ошибках WebFetch в Claude Code
Запустить демо легко, но чтобы вся команда стабильно использовала Claude Code, есть несколько важных нюансов.
Практика 1: Единый managed-settings.json
Разошлите команде унифицированный файл managed-settings.json, чтобы каждый не настраивал всё вручную:
{
"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
}
Пути размещения файла:
| Платформа | Путь |
|---|---|
| macOS | /Library/Application Support/ClaudeCode/managed-settings.json |
| Linux | /etc/claude-code/managed-settings.json |
| Windows | C:\ProgramData\ClaudeCode\managed-settings.json |
Практика 2: Стратегия трехуровневого fallback
Четко пропишите приоритеты выбора инструментов в CLAUDE.md, чтобы Claude пробовал их по порядку:
## Приоритеты инструментов веб-скрейпинга
1. Приоритет отдается WebFetch (для предварительно авторизованных доменов).
2. Если WebFetch не срабатывает, происходит откат (fallback) к Bash curl.
3. Для динамических сайтов используйте Playwright MCP.
4. Никогда не используйте `curl -k` для игнорирования ошибок сертификатов.
```markdown
Эта настройка добавляется в CLAUDE.md, чтобы Claude при возникновении ошибки WebFetch **автоматически переключался на curl**, что значительно улучшает пользовательский опыт.
Практика 3: Скрипт проверки работоспособности (preflight)
Напишите быстрый диагностический скрипт, чтобы запускать его перед началом работы:
#!/bin/bash
# claude-code-doctor.sh
echo "=== Переменные окружения ==="
env | grep -iE "proxy|claude_code|node_extra"
echo "=== Тест preflight claude.ai ==="
curl -sI -o /dev/null -w "HTTP %{http_code} · %{time_total}s\n" \
https://claude.ai/code/
echo "=== Тест api.anthropic.com ==="
curl -sI -o /dev/null -w "HTTP %{http_code} · %{time_total}s\n" \
https://api.anthropic.com/
echo "=== Тест сервиса-прокси APIYI ==="
curl -sI -o /dev/null -w "HTTP %{http_code} · %{time_total}s\n" \
https://vip.apiyi.com/
echo "=== DNS-запрос ==="
nslookup claude.ai
Если claude.ai/code/ возвращает 403 с заголовком ответа cf-mitigated, это типичная проблема Cloudflare preflight — сразу переходите к решениям 4-го уровня.
🎯 Совет по диагностике: Когда возникают проблемы с Claude Code, 80% из них можно выявить с помощью этого скрипта. Пользователям из Китая рекомендуется добавить
vip.apiyi.comв список проверок — если APIYI доступен, а официальный сайт Anthropic нет, используйте сервис-прокси APIYI (apiyi.com), чтобы не останавливать рабочий процесс из-за сетевых ограничений.
FAQ по ошибкам Claude Code WebFetch
Q1: Почему сообщение об ошибке гласит "enterprise security policies blocking claude.ai", хотя у меня в компании нет никакого защитного ПО?
Это неточное сообщение от Anthropic. На самом деле блокировка происходит из-за защиты Cloudflare bot перед claude.ai. Cloudflare распознает процесс CLI как бота и возвращает JS Challenge, который CLI не может пройти, из-за чего и возникает эта ошибка. С политиками безопасности вашей компании это обычно не связано.
Q2: Может ли сервис-прокси APIYI решить проблему с ошибкой WebFetch?
Частично. APIYI (apiyi.com) отвечает только за пересылку API-запросов к api.anthropic.com, поэтому диалоги с моделью и вызовы инструментов в Claude Code будут работать стабильно. Однако preflight для WebFetch направлен на claude.ai (а не на api.anthropic.com), этот путь APIYI не покрывает — проблему нужно решать через локальный прокси. Рекомендуется комбинированный подход: API идет через прямое соединение с APIYI, а preflight — через прокси.
Q3: Есть ли параметр конфигурации skipWebFetchPreflight?
В сообществе это обсуждается, но по состоянию на апрель 2026 года официальной документации нет. В GitHub issue #39896 упоминается, что это ожидаемая функция для пропуска проверки preflight. До официальной поддержки рекомендуется использовать решение 4-го уровня (Bash curl + авторизованные домены), чтобы обойти эту проблему — эффект тот же, но контроль выше.
Q4: У меня включен глобальный прокси Clash, почему WebFetch все равно выдает ошибку?
Глобальный режим Clash не устанавливает переменные окружения автоматически. Claude Code — это процесс Node.js CLI, он считывает только переменные окружения типа HTTPS_PROXY и не определяет настройки системного прокси. Вам нужно явно экспортировать переменные прокси в shell profile или прописать их в блоке env в ~/.claude/settings.json.
Q5: WebFetch сработал, но результат неполный, только половина контента?
Это ограничение max_content_tokens в Claude Code. В правилах разрешений его нельзя изменить, но если вы вызываете инструмент web_fetch напрямую через API Claude (не через Claude Code CLI), вы можете установить "max_content_tokens": 100000 для увеличения объема захвата страницы. В таких сценариях рекомендуется прямое подключение к API через APIYI (apiyi.com) для большей гибкости.
Q6: Можно ли полностью избежать ошибки, отключив WebFetch?
Да. При запуске добавьте параметр:
claude --disallowedTools WebFetch
Или в settings.json:
{
"permissions": {
"deny": ["WebFetch"]
}
}
В сочетании с разрешением Bash(curl:*), Claude автоматически начнет использовать curl, что для пользователей из Китая зачастую работает лучше.
Q7: Как настроить Claude Code в GitHub Actions / GitLab CI?
В CI-контейнерах на 100% рекомендуется отключать WebFetch — в контейнерах нет браузерного окружения, и preflight почти всегда будет падать. В то же время направьте API-запросы на стабильный узел APIYI (apiyi.com):
env:
ANTHROPIC_BASE_URL: https://vip.apiyi.com
ANTHROPIC_API_KEY: ${{ secrets.APIYI_KEY }}
CLAUDE_CODE_DISALLOWED_TOOLS: "WebFetch"
Разбор ошибок Claude Code WebFetch и план действий
Оглядываясь назад, можно сказать, что суть ошибок Claude Code WebFetch кроется в архитектурных ограничениях: Cloudflare preflight + отсутствие браузера в CLI. Это не проблема вашего интернет-соединения или IT-политик. Если коротко:
✅ Три кита для пользователей из РФ: API через сервис-прокси APIYI (apiyi.com) + локальный прокси для прохождения preflight на claude.ai + Bash curl в качестве резервного варианта (fallback). Это позволяет обойти 90% ошибок WebFetch.
План действий
Выполните эти 5 шагов в порядке приоритета:
- Настройка прокси: Установите
HTTPS_PROXY+HTTP_PROXYи добавьте домен APIYI вNO_PROXY. - Предварительная авторизация доменов: Добавьте часто посещаемые сайты в
permissions.allowчерезWebFetch(domain:...). - Обработка корпоративных CA: Если вы работаете в среде Zscaler/CrowdStrike, настройте
NODE_EXTRA_CA_CERTS. - Подготовка fallback: Разрешите
Bash(curl:*), чтобы Claude автоматически переключался на него при возникновении проблем. - Скрипт проверки состояния: Добавьте
claude-code-doctor.shв инструментарий вашей команды.

🎯 Финальный совет: Сетевые проблемы в Claude Code — это многоуровневая инженерная задача, где важна каждая деталь: прокси, сертификаты, правила доступа и приоритеты инструментов. Мы рекомендуем сначала наладить путь вызова API через APIYI (apiyi.com), так как это наиболее контролируемая часть SLA, а затем пошагово решать вопросы с preflight и CA для WebFetch. Платформа поддерживает все модели Claude и нативные инструменты, что упрощает проверку каждой настройки.
Автор: Техническая команда APIYI | Больше практических руководств по Claude Code на help.apiyi.com