How do I set the proxy for particular networks so that it works fine on every apps?
Hai configurato diversi proxy in Preferenze di Sistema, e questo è il modo giusto per farlo (ecco perché l'app App Store e Safari funzionano correttamente). Sfortunatamente, Terminal è un'eccezione e necessita delle proprie impostazioni proxy.
Perché è così? Terminal è semplicemente un contenitore che esegue una shell . Una shell un programma che, semplicemente, visualizza un prompt e attende pazientemente che tu esegua comandi come ls e rm .
Le conchiglie sono precedenti ai macOS e hanno le loro regole per la configurazione dei proxy . Le conchiglie non sanno nulla delle impostazioni del proxy in Preferenze di Sistema e devono essere configurate separatamente.
La shell predefinita di macOS è Bash (puoi scoprire quale shell stai eseguendo eseguendo echo $0 al prompt) quindi spiegherò come impostare il proxy in Bash.
La soluzione semplice
-
Avvia Terminal e digita questo comando per cambiare la directory nella nostra home directory:
cd ~
-
Digita questi comandi per aprire .bash_profile con TextEdit:
touch .bash_profile
open -a TextEdit .bash_profile
-
Imposta le variabili di ambiente del proxy digitando il testo seguente in TextEdit e sostituisci <your http proxy> , <your https proxy> e <your ftp proxy> con il tuo server proxy (se TextEdit contiene già del testo, aggiungi il testo sotto alla fine del file):
export HTTP_PROXY="<your http proxy>"
export http_proxy=$HTTP_PROXY
export HTTPS_PROXY="<your https proxy>"
export http_proxy=$HTTP_PROXY
export FTP_PROXY="<your ftp proxy>"
export ftp_proxy=$FTP_PROXY
Se hai configurato in Preferenze di Sistema un elenco di host e domini che devono essere contattati ignorando direttamente il proxy, aggiungili in questo modo:
export NO_PROXY="<comma-separated list of hosts>"
export no_proxy=$NO_PROXY
Ad esempio:
export HTTP_PROXY="http://10.11.0.1:8080"
export http_proxy=$HTTP_PROXY
export HTTPS_PROXY="http://10.11.0.1:8080"
export http_proxy=$HTTP_PROXY
export FTP_PROXY="http://10.11.0.1:8080"
export ftp_proxy=$FTP_PROXY
export NO_PROXY="localhost,127.0.0.1"
export no_proxy=$NO_PROXY
-
Salva il file con ⌘ S e chiudi TextEdit.
- Chiudi il terminale e riaprilo. Ora le impostazioni del proxy dovrebbero funzionare correttamente.
Una soluzione più elaborata
Il metodo di cui sopra ha uno svantaggio : devi mantenere due configurazioni, quella in Preferenze di sistema e quella in .bash_profile .
Fortunatamente, come spiegato su blog di Derek Morgan , puoi fare in modo che Bash importi Impostazioni proxy delle Preferenze di sistema utilizzando il comando scutil . Segui semplicemente i passaggi descritti nella sezione precedente, ma nel passaggio 3 imposta le variabili di ambiente proxy http / https / ftp come segue:
export HTTP_PROXY=$(scutil --proxy | awk '\
/HTTPEnable/ { enabled = $3; } \
/HTTPProxy/ { server = $3; } \
/HTTPPort/ { port = $3; } \
END { if (enabled == "1") { print "http://" server ":" port; } }')
export http_proxy=$HTTP_PROXY
export HTTPS_PROXY=$(scutil --proxy | awk '\
/HTTPSEnable/ { enabled = $3; } \
/HTTPSProxy/ { server = $3; } \
/HTTPPort/ { port = $3; } \
END { if (enabled == "1") { print "http://" server ":" port; } }')
export https_proxy=$HTTP_PROXY
export FTP_PROXY=$(scutil --proxy | awk '\
/FTPEnable/ { enabled = $3; } \
/FTPProxy/ { server = $3; } \
/FTPPort/ { port = $3; } \
END { if (enabled == "1") { print "http://" server ":" port; } }')
export ftp_proxy=$FTP_PROXY
Nelle definizioni precedenti, ho impostato http:// come schema per tutti i server proxy, potrebbe essere necessario modificarli in socks5:// per SOCKS o https:// per HTTPS se necessario.