Per espandere la risposta di @Steve Roberts.
Il mio nome utente ha il formato "dominio \ nomeutente" - inclusa la barra nella configurazione del proxy ha fatto apparire una barra. Quindi inserendo questo:
npm config set proxy "http://domain\username:password@servername:port/"
Ho anche dovuto codificare l'URL della mia domain\user
stringa, tuttavia ho uno spazio all'interno del mio nome utente, quindi ho inserito un +
per codificare la codifica dell'URL dello spazio, ma verrebbe doppiamente codificata come %2B
(che è la codifica dell'URL per il segno più, tuttavia l'URL la codifica per uno spazio è %20
), quindi ho dovuto invece fare quanto segue:
comando npm
// option one
// it works for some packages
npm config set http_proxy "http://DOMAIN%5Cuser+name:password@x.x.x.x:port"
npm config set proxy "http://DOMAIN%5Cuser+name:password@x.x.x.x:port"
// option two
// it works best for me
// please notice that I actually used a space
// instead of URL encode it with '+', '%20 ' OR %2B (plus url encoded)
npm config set http_proxy "http://DOMAIN%5Cuser name:password@x.x.x.x:port"
npm config set proxy "http://DOMAIN%5Cuser name:password@x.x.x.x:port"
// option two (B) as of 2019-06-01
// no DOMAIN
// instead of URL encode it with '+', '%20 ' OR %2B (plus url encoded)
npm config set http_proxy "http://user name:password@x.x.x.x:port"
npm config set proxy "http://user name:password@x.x.x.x:port"
risoluzione dei problemi di npm config
Ho usato il npm config list
per ottenere i valori analizzati che avevo impostato sopra, ed è così che ho scoperto la doppia codifica. Strano.
In sostanza è necessario capire i seguenti requisiti:
- È una
DOMAIN
stringa richiesta per l'autenticazione
- Devi codificare caratteri speciali?
- Gli spazi e i segni (@) sono particolarmente impegnativi
Saluti.
VARIABILI DELL'AMBIENTE WINDOWS (prompt CMD)
Aggiornare
Si scopre che anche con le configurazioni di cui sopra, ho ancora avuto alcuni problemi con alcuni pacchetti / script che utilizzano il client HTTP HTTP semplificato internamente per scaricare roba. Quindi, come spiegato nel readme sopra, possiamo specificare le variabili di ambiente per impostare il proxy sulla riga di comando e Request rispetterà tali valori.
Quindi, dopo (e sono riluttante ad ammetterlo) diversi tentativi (più simili ai giorni), di provare a impostare le variabili di ambiente, sono finalmente riuscito con le seguenti linee guida:
rem notice that the value after the = has no quotations
rem - I believe that if quotations are placed after it, they become
rem part of the value, you do not want that
rem notice that there is no space before or after the = sign
rem - if you leave a space before it, you will be declaring a variable
rem name that includes such space, you do not want to do that
rem - if you leave a space after it, you will be including the space
rem as part of the value, you do not want that either
rem looks like there is no need to URL encode stuff in there
SET HTTP_PROXY=http://DOMAIN\user name:password@x.x.x.x:port
SET HTTPS_PROXY=http://DOMAIN\user name:password@x.x.x.x:port
cntlm
Ho usato la tecnica di cui sopra per alcune settimane, fino a quando ho capito il sovraccarico di aggiornare la mia password attraverso tutti gli strumenti che avevano bisogno della configurazione del proxy.
Oltre a npm, utilizzo anche:
- pergolato
- vagabondo
- scatola virtuale (con Linux)
- apt-get [linux]
- idiota
- vscode
- parentesi
- atomo
- tsd
cntlm Procedura di installazione
Quindi, ho installato cntlm . L'impostazione cntlm
è piuttosto avanzata, cerchi il file ini @C:\Program Files\Cntlm\cntlm.ini
- Apri
C:\Program Files\Cntlm\cntlm.ini
(potresti aver bisogno dei diritti di amministratore)
- cerca
Username
e Domain
linee (linea 8-9 penso)
- aggiungi il tuo nome utente
- aggiungi il tuo dominio
Al prompt cmd eseguito:
cd C:\Program Files\Cntlm\
cntlm -M
cntlm -H
- ti verrà chiesta la password:
cygwin warning:
MS-DOS style path detected: C:\Program Files\Cntlm\cntlm.ini
Preferred POSIX equivalent is: /Cntlm/cntlm.ini
CYGWIN environment variable option "nodosfilewarning" turns off this warning.
Consult the user's guide for more details about POSIX paths:
http://cygwin.com/cygwin-ug-net/using.html#using-pathnames
Password:
L'output che otterrai cntlm -H
sarà simile a:
PassLM 561DF6AF15D5A5ADG
PassNT A1D651A5F15DFA5AD
PassNTLMv2 A1D65F1A65D1ASD51 # Only for user 'user name', domain 'DOMAIN'
- Si consiglia di utilizzare PassNTLMv2, quindi aggiungere una
#
riga precedente PassLM
e / PassNT
o non utilizzarli
- Incolla l'output dal
cntlm -H
file ini sostituendo le righe per PassLM
, PassNT
e PassNTMLv2
, oppure commenta le righe originali e aggiungi le tue.
- Aggiungi i tuoi
Proxy
server. Se non sai qual è il server proxy ... Fai quello che ho fatto, ho cercato il mio file di configurazione automatica del proxy cercando la AutoConfigURL
chiave di registro inHKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings
. Passa a quell'URL e controlla il codice che sembra essere JavaScript.
- Opzionalmente è possibile cambiare la porta su cui cntlm ascolta cambiando la
Listen ####
linea, dove ####
è il numero di porta.
Imposta NPM con cntlm
Quindi, punti npm al tuo proxy cntml, puoi usare l'ip, ho usato localhost
e la porta predefinita per cntlm, 3128
quindi il mio proxy url assomiglia a questo
http://localhost:3128
Con il comando corretto:
npm config set proxy http: // localhost: 3128
È molto più semplice Configura tutti i tuoi strumenti con lo stesso URL e aggiorni la password in un'unica posizione. La vita non è molto più semplice.
Installazione obbligatoria Il certificato CA npm
Dalla documentazione npm ca
Se il proxy aziendale sta intercettando le connessioni https con il proprio certificato autofirmato, questo è un must da evitare npm config set strict-ssl false
(grande no-no).
Passaggi di base
- Ottieni il certificato dal tuo browser (Chromes funziona bene). Esportalo come X.509 codificato Base-64 (.CER)
- Sostituisci nuove linee con
\n
- Modifica il tuo
.npmrc
aggiungi una rigaca[]="-----BEGIN CERTIFICATE-----\nXXXX\nXXXX\n-----END CERTIFICATE-----"
Problemi
Ho notato che a volte npm si blocca, quindi mi fermo (a volte con forza) cntlm e lo riavvio.