Mobile Proxy Configuration on macOS
macOS keeps proxy settings per network service, and the Terminal does not read them at all. This guide covers the Proxies pane, which browsers follow it, how to script it with networksetup, and what to do about everything that ignores it.
- Proxies belong to a network service — the settings attach to Wi-Fi or Ethernet individually, not to the Mac.
- Safari has no proxy settings of its own — it follows the system pane completely, which makes it the ideal thing to test with.
- The Terminal ignores that pane — curl, git, npm and wget read environment variables instead.
- networksetup scripts the whole thing — useful when you switch between proxied and direct connections regularly.
macOS speaks HTTP(S) and SOCKS5 without any extra software.
networksetup turns the whole configuration into two lines.
The Proxies Pane, and Which Interface It Belongs To
macOS keeps proxy settings in one obvious place, which makes it feel simpler than Windows. It mostly is — with one structural catch that trips people up long after the initial setup works: the settings belong to a network service, not to the Mac.
Open System Settings, go to Network, and select the connection you are currently using. Click Details, then Proxies. You will see a list of proxy types with checkboxes. Turn on the one you need, fill in the server and port, tick the authentication box if your proxy needs credentials, and click OK followed by Apply.
| Entry in the pane | What it actually configures | Use it when |
|---|---|---|
| Web Proxy (HTTP) | Plain HTTP requests | Always, alongside the secure entry — most traffic is HTTPS but some is not |
| Secure Web Proxy (HTTPS) | The tunnel used for HTTPS requests | Always. Leaving this off is why some sites load and others do not |
| SOCKS Proxy | Raw TCP, not just web traffic | For non-web protocols, or when your provider gives a SOCKS5 port |
| Bypass list | Hosts that should go direct | Local addresses and internal hostnames that a proxy cannot reach |
These settings attach to the network service you had selected — Wi-Fi, say. Plug in Ethernet, tether to a phone, or connect a USB adapter, and macOS uses that service’s own proxy settings, which are empty. The proxy has not stopped working; you are simply on a different interface that was never configured. Configure each service you actually use.
The same structure makes macOS pleasant to script. Because each service is addressed by name, two commands turn a proxy on and two turn it off, which beats clicking through the pane every time you switch.
networksetup -listallnetworkservices networksetup -setwebproxy "Wi-Fi" proxy.example.net 8000 on user123 s3cret networksetup -setsecurewebproxy "Wi-Fi" proxy.example.net 8000 on user123 s3cret networksetup -setsocksfirewallproxy "Wi-Fi" proxy.example.net 1080 on user123 s3cret networksetup -getwebproxy "Wi-Fi" networksetup -setwebproxystate "Wi-Fi" off
The state commands turn a proxy off without clearing what you typed, so switching between proxied and direct is one command rather than a re-entry of four values.
Safari, Chrome and the Browsers That Follow the System
Safari has no proxy configuration of its own. None — there is no dialog to find and nothing to get wrong. Every request Safari makes follows the Proxies pane. That is unusual enough to be worth exploiting: Safari is the cleanest possible test of whether your system-level configuration is correct, because it cannot be overridden by an application setting you forgot about.
Chrome follows the system pane by default too, and its proxy settings button simply opens macOS Network settings rather than offering its own. It can be overridden at launch with a command-line flag, which is occasionally useful for running one browser through a proxy while the rest of the system goes direct.
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \ --proxy-server="http://proxy.example.net:8000" \ --user-data-dir="/tmp/chrome-proxied"
Firefox is the outlier, as it is everywhere: it keeps its own connection settings and will use them in preference to the system. If Safari exits through the proxy and Firefox does not, that dialog is where to look.
For running several profiles through different proxies at once, browser flags stop being enough — that is what antidetect browsers exist for.
The Terminal Does Not Read the Proxies Pane
This is the one that catches everyone. curl, wget, git, npm, pip and essentially every command-line tool on macOS ignore the Proxies pane completely. They read environment variables, exactly as they do on Linux, and macOS provides no bridge between the two.
It is not a bug and there is no setting to make it behave otherwise. The pane configures the system networking layer that Cocoa applications use; command-line tools inherited a Unix convention that predates it.
export http_proxy="http://user123:[email protected]:8000" export https_proxy="$http_proxy" export no_proxy="localhost,127.0.0.1,::1" # Verify without touching the shell environment curl -x "$http_proxy" https://api.ipify.org ; echo curl https://api.ipify.org ; echo
Lower case is the safer choice on macOS. Some tools read only the lower-case names, a few read only the upper-case ones, and setting both is common practice — though be aware that HTTPS_PROXY in upper case is ignored by curl by design, to avoid a header-injection issue. Exporting the lower-case pair covers the widest range of software.
As on any system, putting a password in a shell profile means every process you run can read it. If the Mac has a stable address, ask your provider to whitelist it instead and drop the credentials entirely.
Diagnosing a Proxy That macOS Says Is Configured
The Proxies pane showing a ticked box is not evidence that the application you care about is using it. Work outwards from the layer, not from the credentials.
| Symptom | Most likely cause |
|---|---|
| Worked yesterday, not today | You are on a different network service. Check which interface is active. |
| Safari proxied, Terminal is not | Working as designed. Export the environment variables. |
| Some sites load, others hang | Web Proxy is on but Secure Web Proxy is off, so HTTPS has no route. |
| Firefox alone bypasses the proxy | Its own connection settings override the system. |
| Credentials rejected repeatedly | SOCKS credentials in the web proxy fields. The two ports have separate logins. |
The quickest single test is to open Safari and load a page that shows your public address. Because Safari cannot be independently configured, whatever it reports is the truth about your system-level proxy — and if it is proxied while something else is not, the system is fine and the other application is reading a different layer.
You can also confirm the endpoint itself with the free PXM2 proxy checker, which reports the detected proxy type and exit country.
Get a Mobile Proxy for macOS
Live PXM2 locations — pick the country you need an exit IP in, and configure it with the steps on this page:
France
India
Singapore
Frequently Asked Questions
How do I set up a proxy on macOS?
Open System Settings, go to Network, select the connection you are using, click Details and then Proxies. Turn on Web Proxy for HTTP, Secure Web Proxy for HTTPS, or SOCKS Proxy, enter the host and port, add your credentials if the proxy uses them, and click OK. Safari and Chrome pick this up immediately.
Why does my proxy stop working when I switch from Wi-Fi to Ethernet?
Because macOS stores proxy settings per network service rather than globally. Configuring the Proxies pane while on Wi-Fi configures Wi-Fi only, and connecting over Ethernet or a different adapter uses that adapter’s own settings, which are empty. Configure each service you actually use, or script it with networksetup.
Does Safari have its own proxy settings?
No. Safari has no independent proxy configuration at all — every request it makes follows the Proxies pane in Network settings. That makes it genuinely useful as a diagnostic: if Safari exits through the proxy and another application does not, the system configuration is fine and the other application is reading something else.
Why does curl ignore my macOS proxy settings?
Because curl never reads the Proxies pane. It reads the http_proxy and https_proxy environment variables, as do wget, git and npm. Export them in your shell profile, or pass the proxy to curl explicitly. This is a design difference rather than a fault, and it catches almost everyone once.
How do I set a proxy on macOS from the command line?
Use networksetup, naming the network service exactly as it appears in Network settings — for example networksetup -setwebproxy "Wi-Fi" host port. There are matching commands for the secure web proxy and the SOCKS proxy, plus state commands to turn each one off again without clearing what you typed.
Related Mobile Proxy Guides
Windows and Linux split the same problem differently — both are worth a look if you work across machines.
Setup guides
Core mobile proxy guides
Run Your Mac Behind a Real Carrier IP
Dedicated 4G/5G modems with unlimited bandwidth and unlimited rotations — HTTP(S) and SOCKS5 endpoints that macOS speaks natively, with no client to install.
Get a Mobile Proxy