How to Configure a Proxy in Chrome and Firefox
Configure a proxy in Chrome and Firefox the right way: manual setup, the Chrome launch flag, Firefox SOCKS with DNS, PAC files, FoxyProxy auth, and IP checks.

To configure a proxy in Chrome and Firefox correctly, you have to accept one fact first: these two browsers do not handle proxies the same way. Chrome has no proxy settings of its own. The button buried in chrome://settings hands you straight to the operating system's proxy dialog, so a single change also reroutes Edge, your system updater, and most desktop apps. Firefox keeps its own independent proxy stack that touches nothing else on the machine. This guide covers both the right way: the manual dialogs, giving Chrome a private proxy with a launch flag and a separate profile, Firefox SOCKS with its DNS leak fix, PAC files, per-tab and authenticated proxies through FoxyProxy, the username and password popup that trips everyone up, and how to prove the real exit IP.
Why Route Chrome or Firefox Through a Proxy
Most proxy work happens in code, but the browser is where you first check whether a proxy behaves. Routing Chrome or Firefox through a proxy lets you do a few things a bare connection cannot:
- See a page as a specific region does. Load a geo-gated store or search result as if you sat in the US, Germany, or Japan, and confirm the content actually changes.
- Reproduce what your scraper sees. If production traffic leaves through a datacenter or residential IP, browsing from your laptop hides the blocks, prices, and redirects your bot will hit.
- Debug a proxy by eye. Before you wire a proxy into a script, a browser tells you fast whether the IP is alive, whether it is blocked, and what the target renders.
The catch is that "set a proxy in the browser" means two completely different operations depending on which browser you open. Get that wrong and you either change your whole computer by accident or spend an hour wondering why HTTPS pages ignore the proxy.
Before You Start: Your SparkProxy Proxy Details
SparkProxy issues an endpoint in host:port:user:pass form. A datacenter line looks like this:
proxy.sparkproxy.io:10000:sp-user-12345:A1b2c3d4e5
Every dialog below splits those four parts across separate fields, so keep this mapping handy:
| Credential part | Example value | Where it goes |
|---|---|---|
| host | `proxy.sparkproxy.io` | Proxy host / server field |
| port | `10000` | Port field |
| user | `sp-user-12345` | Username (auth popup or extension) |
| pass | `A1b2c3d4e5` | Password (auth popup or extension) |
If your plan uses IP whitelisting instead of a username and password, you skip the credentials entirely and add your current IP in the dashboard. The trade-off between the two methods is covered in how proxy authentication works and what IP whitelisting is. One protocol note: a standard SparkProxy HTTP endpoint tunnels HTTPS traffic through CONNECT, so you use the HTTP option in every browser field below. Pick SOCKS only if your plan issued a SOCKS endpoint. If that distinction is fuzzy, read HTTP, HTTPS, and SOCKS5 proxy protocols.
Scraping at scale? Skip the blocks.
Fast, unblockable datacentre proxies with unlimited bandwidth.
Configure a Proxy in Chrome and Firefox: Why the Two Differ
Here is the single idea that saves the most time. Chrome does not have a browser-level proxy. Firefox does.
Open chrome://settings/system and click "Open your computer's proxy settings." Chrome does not show you a proxy form. It launches the Windows Internet Options dialog or the macOS Network panel, because Chrome reads its proxy from the operating system. Change it there and you have changed the proxy for Edge, Chrome, Electron apps, and any tool that follows the system setting. That is rarely what you want when you only meant to route one browser.
Firefox is the opposite. Its proxy configuration lives at about:preferences, entirely inside the browser. Choose "Manual proxy configuration" and Firefox ignores the operating system completely. Nothing else on the machine changes.
| Behavior | Chrome | Firefox |
|---|---|---|
| Has its own in-app proxy UI | No, opens the OS dialog | Yes, in `about:preferences` |
| Default source of proxy config | Operating system | "Use system proxy settings" (changeable) |
| Isolate the proxy to one browser | Only via a launch flag + separate profile | Native, choose Manual configuration |
| Native PAC URL field in the browser | No, set it in the OS | Yes |
| Native per-request routing by an extension | Limited | Full, via the proxy API |
Read that table once and every step below makes sense. To give Chrome a proxy that does not spill onto the rest of your system, you launch it from the command line. Firefox needs no such trick.
Configure a Proxy in Chrome
There are two honest ways to set a proxy for Chrome. The GUI path changes your whole system. The launch-flag path keeps the proxy inside one isolated Chrome instance. Pick based on whether you want the machine or just one browser behind the proxy.
Option A: the system dialog (changes everything)
- Open
chrome://settings/system. - Click Open your computer's proxy settings.
- You are now in the OS proxy dialog. On Windows, toggle Use a proxy server under Manual proxy setup and enter
proxy.sparkproxy.ioand port10000. On macOS, tick Web Proxy (HTTP) and Secure Web Proxy (HTTPS) and enter the same host and port in each. - Save. Chrome, Edge, and most desktop apps now use that proxy.
This is the same store the OS-level guides configure. If a machine-wide datacenter proxy is what you actually want, follow the deeper walkthroughs in set up a datacenter proxy on Windows and configure a datacenter proxy on macOS. For one browser only, use Option B.
Option B: give Chrome its own proxy with a launch flag
Chrome accepts a --proxy-server flag at startup. This applies only to the instance you launch and never touches the OS setting. The important trick is pairing it with --user-data-dir, a throwaway profile folder. Without a separate profile, your new flag often just opens a tab inside the Chrome that is already running and the flag is silently ignored.
Windows (PowerShell):
& "C:\Program Files\Google\Chrome\Application\chrome.exe" `
--proxy-server="http://proxy.sparkproxy.io:10000" `
--user-data-dir="C:\chrome-proxy-profile"
macOS:
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \
--proxy-server="http://proxy.sparkproxy.io:10000" \
--user-data-dir="/tmp/chrome-proxy-profile"
Linux:
google-chrome \
--proxy-server="http://proxy.sparkproxy.io:10000" \
--user-data-dir="/tmp/chrome-proxy-profile"
For a SOCKS endpoint, swap the scheme:
--proxy-server="socks5://proxy.sparkproxy.io:10000"
Chrome sends DNS lookups through the proxy for socks5://, so hostnames resolve at the exit and not on your machine. That is the browser doing remote DNS for you, which matters for both privacy and geo accuracy.
Add a bypass list for local addresses so internal tools stay direct:
--proxy-bypass-list="localhost;127.0.0.1;*.internal"
One limitation to know now: --proxy-server cannot carry a username and password. Writing http://user:pass@host:port in the flag does not work. Chrome ignores the credentials and pops an authentication dialog on the first request. The authentication section covers the three real fixes.
Configure a Proxy in Firefox
Firefox is the friendlier browser for a single-app proxy because everything lives in one dialog and nothing leaks to the OS.
- Open
about:preferences, scroll to the bottom, and under Network Settings click Settings. - In the Connection Settings window, choose Manual proxy configuration.
- For an HTTP endpoint, put
proxy.sparkproxy.ioin HTTP Proxy and10000in Port, then tick Also use this proxy for HTTPS. Older builds label this "Use this proxy server for all protocols"; the effect is the same. - Click OK. The change is live immediately for new requests.
The No proxy for box takes a comma-separated bypass list. A sane default:
localhost, 127.0.0.1, ::1
SOCKS v4, SOCKS v5, and the DNS checkbox that matters
If your plan issued a SOCKS endpoint, leave the HTTP fields empty and fill the SOCKS Host field instead, then choose the SOCKS v5 radio button (use SOCKS v4 only for a legacy v4 endpoint). Below those fields sits the setting most guides skip: Proxy DNS when using SOCKS5.
Tick it. With that box unchecked, Firefox resolves domain names on your own machine using your local resolver, then sends the resulting IP to the proxy. That is a DNS leak: your ISP or resolver sees every hostname you visit, and a geo-sensitive site can catch the mismatch between your local DNS and the proxy's country. Checked, Firefox hands the hostname to the SOCKS5 proxy and lets the exit resolve it. Under the hood this flips the network.proxy.socks_remote_dns preference in about:config, which you can also toggle directly. For anything privacy or geo related, this checkbox is not optional.
Firefox also has a proxy authentication prompt, and like Chrome it gives you no field to pre-enter credentials in this dialog. Options for that are in the authentication section.
Route Traffic with a PAC File
A Proxy Auto-Config file is a small JavaScript file with one function, FindProxyForURL(url, host), that returns which proxy (if any) a given URL should use. It is the cleanest way to say "send these sites through SparkProxy and leave the rest direct." Here is a working example that proxies everything except local addresses:
function FindProxyForURL(url, host) {
// Local traffic stays direct; everything else uses SparkProxy
if (isPlainHostName(host) ||
shExpMatch(host, "localhost") ||
shExpMatch(host, "127.0.0.1")) {
return "DIRECT";
}
return "PROXY proxy.sparkproxy.io:10000; DIRECT";
}
To route through a SOCKS exit instead, return "SOCKS5 proxy.sparkproxy.io:10000". The trailing DIRECT is a fallback: if the proxy is unreachable, the browser connects directly rather than failing hard. Remove it if you would rather the request fail than leak.
Where you point the browser at that file is, again, split by browser:
- Firefox has a native field. In Connection Settings choose Automatic proxy configuration URL and paste the PAC location, for example
https://www.sparkproxy.io/proxy.pacor a localfile:///C:/proxy/spark.pacpath. - Chrome has no in-browser PAC field. Set the PAC in the OS "Use setup script" box (Windows) or the "Automatic Proxy Configuration" field (macOS), or push it with the enterprise
ProxyPacUrlpolicy. Chrome then reads it from the system, consistent with everything else about Chrome and proxies.
A PAC file cannot carry a username and password either, so an authenticated proxy still needs the handling below. For the full syntax and more routing patterns, see what a PAC file is and how it works.
Per-Tab and Authenticated Proxies with FoxyProxy
The native dialogs give you one proxy for the whole browser and no place to store credentials. A proxy switcher extension fixes both. FoxyProxy is the common pick and ships for Chrome and Firefox.
FoxyProxy Standard lets you:
- Save several proxies, each with host, port, type (HTTP, HTTPS, SOCKS4, SOCKS5), and a username and password stored with the proxy.
- Route by URL pattern, so
*.sparkproxy.iogoes through one exit while everything else stays direct or uses another. - Switch the active proxy from the toolbar without reopening any settings dialog.
To add a SparkProxy endpoint: open FoxyProxy options, click Add, enter proxy.sparkproxy.io, port 10000, set the type to HTTP, then fill the username sp-user-12345 and password A1b2c3d4e5. Because the extension answers the proxy's authentication challenge for you, the credential popup never appears. That is the main reason to use it over the launch flag for an authenticated proxy.
FoxyProxy Basic is the stripped-down sibling: it switches between proxies but drops URL patterns. If you only need to flip one proxy on and off, Basic is enough. For per-site routing, use Standard.
A real difference between the browsers shows up here. Firefox exposes a proxy API (browser.proxy.onRequest) that decides the exit per individual request, which is what makes true per-tab and per-container routing possible in Firefox. Pair FoxyProxy or a container proxy add-on with Firefox Multi-Account Containers and each container can hold its own exit IP. Chrome's extension proxy model is coarser and effectively sets one active proxy at a time, so "per tab" in Chrome is really "switch the active proxy as you move between tabs."
Handle the Proxy Authentication Popup
This is the part that sends people in circles. You set the host and port, load a page, and Chrome or Firefox throws a dialog asking for a proxy username and password. Type them and it may work for the session, then ask again after a restart. The reason is simple: a username and password proxy uses HTTP Basic proxy authentication, and neither browser's built-in proxy dialog has a field to store those credentials. The --proxy-server flag cannot hold them, and neither can a PAC file.
You have three real ways to deal with it, in order of how much I reach for them:
- Use IP whitelisting instead of a password. Add your current public IP in the SparkProxy dashboard and drop the credentials entirely. No popup can appear because there is nothing to authenticate. This is the cleanest option on a machine with a stable IP.
- Let an extension answer the challenge. FoxyProxy (previous section) stores the username and password and responds to the proxy's authentication request before any dialog shows. This is the go-to for a laptop whose IP changes.
- Run a local auth-forwarding proxy. A small local relay such as a lightweight forward proxy holds the SparkProxy credentials and listens on
127.0.0.1:PORTwith no auth. Point Chrome's--proxy-serverathttp://127.0.0.1:PORTand the relay adds theProxy-Authorizationheader upstream. Useful for headless automation where no extension is loaded.
One thing not to do: do not disable authentication by leaving the proxy open to the internet. The password exists so that only you use your allocation. If the popup is the whole problem, whitelist your IP.
Verify the Exit IP and Check for Leaks
Never trust a 200 as proof the proxy worked. Confirm the exit IP directly. Two checks, from fastest to most thorough:
1. Compare the reported public IP. In the proxied browser, open any IP-echo page and read the public IP it reports back. Compare it against the exit ranges listed in your SparkProxy dashboard. If it matches the proxy and not your home connection, routing works. If it shows your own ISP address, the proxy was bypassed. A full checklist for this lives in how to test if your proxy is working.
2. Read the Remote Address in DevTools. Open DevTools with F12, go to the Network tab, reload, click any request, and look at Remote Address in the Headers panel. When you route through a proxy, the browser's socket peer is the proxy, so that field shows the proxy's IP and port rather than the origin server. It is a quick way to confirm the browser is actually talking to the proxy and not falling back to a direct connection.
Two leaks can still expose your real address even with the proxy working:
- DNS leak. Covered above for Firefox SOCKS5 by the DNS checkbox. For an HTTP proxy this is a non-issue, because the browser sends the hostname to the proxy in the
CONNECTrequest and the proxy resolves it. Details and a test in proxy DNS leak testing and mitigation. - WebRTC leak. A browser can reveal your real IP over WebRTC's direct UDP path, which ignores your HTTP proxy entirely. If you route the browser for privacy, disable or restrict WebRTC. The mechanism and fixes are in what WebRTC leaks are.
When a Browser Proxy Is Not Enough: the Scraping API
Browser proxying is for interactive, manual work. The moment you need many exits, unattended runs, or a target that blocks even a clean proxy IP, the browser is the wrong tool and you switch to a scraping endpoint. The SparkProxy Scraping API is a normal HTTPS call, so no browser or OS proxy is involved at all, and it adds rotation, real-browser rendering, and anti-bot handling behind one request.
Per the SparkProxy Scraping API docs, the base URL is https://scrape.sparkproxy.io/api/v1 and you authenticate with an X-API-Key header:
curl -H "X-API-Key: YOUR_API_KEY" \
"https://scrape.sparkproxy.io/api/v1?url=https://www.sparkproxy.io&render_js=true&country_code=us&premium_proxy=true"
render_js=true runs the target in a real browser, country_code takes an ISO alpha-2 code for the exit region, and premium_proxy=true routes through residential IPs when a site is strict about datacenter ranges. The same guides that route a browser also route code, so if the browser proxy proves the site is reachable but your script keeps getting blocked, this is the next step, not more browser tweaking.
Common Browser Proxy Errors and Fixes
| Symptom | Likely cause | Fix |
|---|---|---|
| `ERR_PROXY_CONNECTION_FAILED` (Chrome) | Wrong host or port, or the port is blocked | Recheck `host:port`; test that the port is reachable |
| Auth popup keeps returning | Basic proxy auth with no stored credentials | Whitelist your IP, or store the login in FoxyProxy |
| Exit IP equals your real IP | HTTPS not proxied, or the browser used the OS proxy | In Firefox tick "Also use this proxy for HTTPS"; in Chrome confirm the flag instance is the one you are browsing in |
| Chrome ignores `--proxy-server` | Another Chrome was already running | Add `--user-data-dir` to force a separate profile and process |
| Hostnames leak to local DNS (Firefox SOCKS) | "Proxy DNS when using SOCKS5" unchecked | Enable it, or set `network.proxy.socks_remote_dns` to true |
| Real IP shows over WebRTC | WebRTC bypasses the HTTP proxy | Disable or restrict WebRTC in the browser |
| `407 Proxy Authentication Required` | Wrong username or password, or IP not whitelisted | Re-enter the credentials, or add your IP in the dashboard |
Frequently asked questions
FAQ
Usually yes. Chrome has no proxy of its own; chrome://settings opens your operating system's proxy dialog, so the setting also applies to Edge and most desktop apps. To keep the proxy inside one browser, launch Chrome with --proxy-server and a separate --user-data-dir profile instead of using the settings screen.
Open about:preferences, click Settings under Network Settings, and choose Manual proxy configuration. Firefox keeps its own independent proxy stack, so entering the host and port there routes Firefox only and never touches the operating system or other browsers.
Because a username and password proxy uses HTTP Basic authentication, and neither browser's built-in proxy dialog stores those credentials. The --proxy-server flag and PAC files cannot hold them either. Stop the popup by whitelisting your IP in the dashboard, or by storing the login in an extension like FoxyProxy that answers the challenge for you.
Enabled, it sends domain lookups through the SOCKS5 proxy so the exit resolves them. Disabled, Firefox resolves names on your own machine and leaks every hostname to your local DNS, which also breaks geo targeting. Turn it on for any privacy or region-sensitive use; it maps to the network.proxy.socks_remote_dns preference.
Not with the native settings, which apply one proxy to the whole browser. Use FoxyProxy with URL patterns to route different sites through different exits. Firefox goes further: its per-request proxy API lets add-ons assign a separate exit to each Multi-Account Container, which is true per-context routing.
Set it in the OS only when you genuinely want every app behind the same proxy. For testing one exit, or running two exits side by side, configure a proxy in Chrome and Firefox separately: a launch-flag Chrome instance for one exit and Firefox's manual configuration for another, so each browser stays isolated and you can compare results in parallel.
Get 50% off your first month
Premium datacentre proxies with unlimited bandwidth. Use the code at checkout.
Offer ends soon — claim it before it's gone
Related articles

How to Scrape Alibaba Product Data
Scrape Alibaba product data at B2B depth: parse ladder pricing, normalize MOQ units, read supplier trust badges, and pivot rows from products to suppliers.

How to Detect When Your Scraper Is Blocked
Detect when your scraper is blocked, including silent HTTP 200 soft blocks: baselines, selector contracts, canary URLs, and per-IP success rates.

How to Bypass GeeTest CAPTCHA: Avoidance Over Solvers
Bypass GeeTest CAPTCHA by never triggering it: what moves the score, how to fix IP, TLS and session signals, and why back-off outlasts every solver.
