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.