Npm за прокси-сервером не работает со статусом 403
Я пытаюсь запустить npm за прокси. Я попробовал войти в прокси напрямую или через Authoxy:
npm config set proxy http://localhost:8999
npm config set https-proxy http://localhost:8999
Независимо от того, какой прокси я использую, я всегда получаю ту же ошибку при запуске npm search
:
npm info it worked if it ends with ok
npm verb cli [ 'node', '/usr/local/bin/npm', 'search' ]
npm info using [email protected]
npm info using [email protected]
npm verb config file /Users/xxx/.npmrc
npm verb config file /usr/local/etc/npmrc
npm verb config file /usr/local/lib/node_modules/npm/npmrc
npm WARN Building the local index for the first time, please be patient
npm verb url raw /-/all
npm verb url resolving [ 'https://registry.npmjs.org/', './-/all' ]
npm verb url resolved https://registry.npmjs.org/-/all
npm info retry registry request attempt 1 at 09:48:47
npm http GET https://registry.npmjs.org/-/all
npm info retry will retry, error on last attempt: Error: tunneling socket could not be established, sutatusCode=403
npm info retry registry request attempt 2 at 09:48:57
npm http GET https://registry.npmjs.org/-/all
npm info retry will retry, error on last attempt: Error: tunneling socket could not be established, sutatusCode=403
npm info retry registry request attempt 3 at 09:49:57
npm http GET https://registry.npmjs.org/-/all
npm ERR! Error: tunneling socket could not be established, sutatusCode=403
npm ERR! at ClientRequest.onConnect (/usr/local/lib/node_modules/npm/node_modules/request/tunnel.js:148:19)
npm ERR! at ClientRequest.g (events.js:185:14)
npm ERR! at ClientRequest.EventEmitter.emit (events.js:115:20)
npm ERR! at Socket.socketOnData (http.js:1383:11)
npm ERR! at TCP.onread (net.js:410:27)
Команда всегда терпит неудачу с sutatusCode
[sic!] 403, что означает несанкционированный доступ. Я установил Authoxy, чтобы не требовать имя пользователя/пароль. Такая же ошибка возникает, когда я обходит Authoxy и предоставляю реальные учетные данные прокси для нашего прокси-сервера NTLM в виде http://user: pass @proxy: port.
Как я могу выполнить эту работу через прокси?
Обновление
Я создал проблему в проекте NPM, чтобы сообщить об этом: https://github.com/isaacs/npm/issues/2866
Ответы
Ответ 1
Итак, через несколько минут после публикации вопроса я сам нашел ответ здесь: https://github.com/npm/npm/issues/2119#issuecomment-5321857
Кажется, проблема в том, что npm не так хорош с HTTPS через прокси. Изменение URL-адреса реестра с HTTPS на HTTP исправило это для меня:
npm config set registry http://registry.npmjs.org/
Я все еще должен предоставить конфигурацию прокси (через Authoxy в моем случае), но теперь все работает нормально.
Кажется, это общая проблема, но недостаточно хорошо задокументирована. Я надеюсь, что этот ответ поможет людям найти, сталкиваются ли они с этой проблемой.
Ответ 2
npm config set proxy http://proxy.company.com:8080
npm config set https-proxy http://proxy.company.com:8080
кредит отправляется http://jjasonclark.com/how-to-setup-node-behind-web-proxy.
Ответ 3
Если вам необходимо указать имя пользователя и пароль для аутентификации в вашем прокси, это синтаксис для использования:
npm config set proxy http://usr:[email protected]:port
npm config set https-proxy http://usr:[email protected]:port
Ответ 4
Если кто-то еще завершит нарушение своих настроек конфигурации прокси, перейдите в свой .npmrc, чтобы ввести настройки. Этот файл находится на уровне корневой папки node.
Вот что выглядит мой исправленный файл:
#proxy = http://proxy.company.com:8080
https-proxy = https://proxy.company.com:8080
registry = http://registry.npmjs.org/
Ответ 5
Для тех, кто использует Jenkins или другой сервер CI: важно, где вы определяете свои прокси, особенно когда они отличаются в вашей локальной среде разработки и среде CI. В этом случае:
- не определяйте прокси в файле проекта .npmrc. Или, если вы это сделаете, не забудьте переопределить настройки на сервере CI.
- любые другие настройки прокси-сервера могут вызвать
403 Forbidden
с небольшим намеком на то, что вы используете неправильный прокси-сервер. Проверьте свои gradle.properties
и т.д. И исправьте /gradle.properties
при необходимости.
TL;DR: определить прокси не в проекте, а на машине, на которой вы работаете.