{"id":731,"date":"2026-07-18T17:34:56","date_gmt":"2026-07-18T14:34:56","guid":{"rendered":"https:\/\/mexela.com\/blog\/proxy-setup-developer-guides\/"},"modified":"2026-10-16T21:23:44","modified_gmt":"2026-10-16T18:23:44","slug":"proxy-setup-developer-guides","status":"publish","type":"page","link":"https:\/\/mexela.com\/blog\/proxy-setup-developer-guides\/","title":{"rendered":"Proxy Setup and Developer Guides"},"content":{"rendered":"<p class=\"mexela-answer\">A reliable proxy setup has three parts: a client setting the application actually honors, credentials stored outside logs and source code, and a direct-versus-proxied check that proves the observed route changed. Configure one client first and keep concurrency low until that path is repeatable.<\/p>\n<p>This hub organizes browser, operating-system, command-line, Python, and Node.js setup guides by the job you are doing. Proxy syntax, DNS handling, and authentication support still need to be checked against the current client version. Before scaling a client, review <a href=\"\/blog\/http-https-socks5-proxies\/\">HTTP, HTTPS, and SOCKS5 proxy behavior<\/a>, compare <a href=\"\/blog\/proxy-authentication-username-password-vs-ip-auth\/\">username\/password and IP authentication<\/a>, and use <a href=\"\/blog\/choose-reliable-proxy-service\/\">the proxy service selection checklist<\/a> to avoid buying capacity for a configuration problem.<\/p>\n<h2 id=\"problem-reading-paths\">Choose a reading path by the problem<\/h2>\n<p>Start with the failed layer and finish with one repeatable request. These routes connect the concept, the client setting and the evidence to collect.<\/p>\n<h3 id=\"authentication-path\">A proxy rejects authentication or returns 407<\/h3>\n<ol>\n<li>Identify whether the account uses <a href=\"\/blog\/proxy-authentication-username-password-vs-ip-auth\/\">proxy credentials or source-IP authorization<\/a>.<\/li>\n<li>Use <a href=\"\/blog\/curl-proxy\/\">a small cURL diagnostic<\/a> to distinguish the proxy CONNECT response from the destination response.<\/li>\n<li>If Java HTTP works but HTTPS fails, read <a href=\"\/blog\/java-httpclient-okhttp-proxy\/\">the JDK CONNECT and OkHttp authentication checks<\/a>.<\/li>\n<li>Compare the evidence in <a href=\"\/blog\/support-case-407-after-proxy-replacement\/\">a real support case with later 407 reports after replacement replies<\/a>. A replacement notice does not establish a successful follow-up request.<\/li>\n<\/ol>\n<h3 id=\"api-allowlisting-path\">An API rejects a request from the expected address<\/h3>\n<ol>\n<li>Separate your client public source address from the proxy exit address in <a href=\"\/blog\/static-ip-proxy-api-allowlisting\/\">the API allowlisting guide<\/a>.<\/li>\n<li>Check <a href=\"\/blog\/http-proxy-https-proxy-no-proxy\/\">HTTP_PROXY, HTTPS_PROXY and NO_PROXY<\/a> so the selected API route is intentional.<\/li>\n<li>Reproduce the API request with <a href=\"\/blog\/python-httpx-proxy\/\">HTTPX<\/a> or <a href=\"\/blog\/php-curl-proxy\/\">native PHP cURL<\/a>; keep destination credentials separate from proxy credentials.<\/li>\n<\/ol>\n<h3 id=\"connection-diagnostics-path\">A request times out, fails TLS or takes the wrong route<\/h3>\n<ol>\n<li>Classify the failure with <a href=\"\/blog\/proxy-testing-troubleshooting\/\">the testing and troubleshooting hub<\/a> before changing settings.<\/li>\n<li>Compare <a href=\"\/blog\/http-https-socks5-proxies\/\">proxy protocol and CONNECT behavior<\/a>, then verify strict TLS and the selected client route with <a href=\"\/blog\/proxy-client-compatibility\/\">the tested-client matrix<\/a>.<\/li>\n<li>Run one direct control and one explicit proxy request. Use <a href=\"\/blog\/proxy-code-examples-repository\/\">the versioned example repository<\/a> to record status and transport outcomes separately.<\/li>\n<\/ol>\n<h2 id=\"start-here\">Start here<\/h2>\n<ol>\n<li>For interactive use, follow the <a href=\"\/blog\/setup-proxy-chrome-firefox-windows-macos\/\">Chrome, Firefox, Windows, and macOS setup guide<\/a>.<\/li>\n<li>For a language overview, compare <a href=\"\/blog\/use-proxies-curl-python-nodejs\/\">proxy configuration in cURL, Python, and Node.js<\/a>.<\/li>\n<li>For a Python service, use the focused <a href=\"\/blog\/python-requests-proxy\/\">Python Requests proxy guide<\/a>.<\/li>\n<li>For a reproducible command-line check, start with the <a href=\"\/blog\/curl-proxy\/\">cURL proxy guide<\/a>.<\/li>\n<\/ol>\n<h2 id=\"client-comparison\">Choose the configuration layer<\/h2>\n<table>\n<thead>\n<tr>\n<th>Client or layer<\/th>\n<th>Good fit<\/th>\n<th>Main setup risk<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Operating system<\/td>\n<td>Applications that honor system settings<\/td>\n<td>Assuming every application inherits the setting<\/td>\n<\/tr>\n<tr>\n<td>Browser<\/td>\n<td>Interactive QA in a controlled profile<\/td>\n<td>Extensions, account state, or DNS changing the observation<\/td>\n<\/tr>\n<tr>\n<td>cURL<\/td>\n<td>Small reproducible diagnostics<\/td>\n<td>Credentials appearing in history or process listings<\/td>\n<\/tr>\n<tr>\n<td>Python Requests<\/td>\n<td>HTTP workflows with session control<\/td>\n<td>Applying environment and session settings inconsistently<\/td>\n<\/tr>\n<tr>\n<td>Node.js client<\/td>\n<td>Application and automation integrations<\/td>\n<td>Using an agent that does not match the library<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Prefer application-level configuration when you need precise ownership of the route. A system-wide setting is convenient, but it can make tests ambiguous when one application ignores it or another starts using it unexpectedly.<\/p>\n<p>If this is your first endpoint, begin with <a href=\"\/blog\/how-to-use-proxies-beginner-guide\/\">how to use a proxy step by step<\/a>: record the host, port, protocol, and authentication method; configure one client; then compare a direct and proxied request before using a specialized integration.<\/p>\n<h2 id=\"guides-by-task\">Choose a guide by task<\/h2>\n<h3>Set up a browser or desktop<\/h3>\n<p>Use the <a href=\"\/blog\/setup-proxy-chrome-firefox-windows-macos\/\">browser and operating-system guide<\/a> for manual regional QA, troubleshooting, or a dedicated browsing profile. Record whether the setting is system-wide, browser-specific, or supplied by an extension.<\/p>\n<h3>Create a minimal diagnostic<\/h3>\n<p>Use the <a href=\"\/blog\/curl-proxy\/\">cURL proxy guide<\/a> to establish a direct baseline, make one proxied request, inspect the status, and confirm the exit observation. Replace secrets with placeholders before sharing a command.<\/p>\n<h3>Build a Python integration<\/h3>\n<p>Use the <a href=\"\/blog\/python-requests-proxy\/\">Python Requests guide<\/a> to create an explicit session when several calls share proxy and timeout behavior. Handle authentication errors separately from connection and destination failures.<\/p>\n<h3>Build a Node.js integration<\/h3>\n<p>Use the <a href=\"\/blog\/use-proxies-curl-python-nodejs\/\">cURL, Python, and Node.js overview<\/a> to match the proxy agent or client option to the HTTP library. Add bounded timeouts, conservative retries, and a stop condition before increasing workload.<\/p>\n<h3>Automate a browser with Playwright<\/h3>\n<p>Use the <a href=\"\/blog\/playwright-proxy\/\">Playwright proxy guide<\/a> for browser-level or context-level routing, structured HTTP proxy credentials, bypass rules, clean-context verification, and browser troubleshooting.<\/p>\n<h3>Route Axios requests in Node.js<\/h3>\n<p>Use the <a href=\"\/blog\/axios-proxy\/\">Axios proxy config and proxy: false guide<\/a> for native proxy fields, environment behavior, custom agents, timeouts, safe error logging, and layered Node.js diagnostics.<\/p>\n<h3>Automate Chromium with Puppeteer<\/h3>\n<p>Use the <a href=\"\/blog\/puppeteer-proxy-setup\/\">Puppeteer proxy setup guide<\/a> for a process-level Chromium route, page authentication, session isolation, and an exit check from inside the automated browser.<\/p>\n<h3>Configure Docker network scopes<\/h3>\n<p>Use the <a href=\"\/blog\/docker-proxy-configuration\/\">Docker proxy configuration guide<\/a> to separate daemon pulls, image builds, container environments, and <code>NO_PROXY<\/code> bypasses.<\/p>\n<h3>Route Git and npm developer traffic<\/h3>\n<p>Use the <a href=\"\/blog\/git-npm-proxy-settings\/\">Git and npm proxy settings guide<\/a> to inspect config scope, preserve TLS verification, test each client, and remove stale values.<\/p>\n<h3>Configure SOCKS5 and destination DNS<\/h3>\n<p>Use the <a href=\"\/blog\/socks5-proxy-setup\/\">SOCKS5 setup guide<\/a> for Chrome, Firefox, and curl when proxy-side DNS or a non-HTTP relay is required.<\/p>\n<h3>Set a proxy on Android or iPhone<\/h3>\n<p>Use the <a href=\"\/blog\/proxy-android-iphone\/\">Android and iPhone proxy guide<\/a> for per-Wi-Fi HTTP settings, cellular boundaries, and application-specific verification.<\/p>\n<h3>Install Python packages with pip<\/h3>\n<p>Use the <a href=\"\/blog\/pip-proxy-configuration\/\">pip proxy configuration guide<\/a> to compare a temporary <code>--proxy<\/code> option, shell variables, and scoped configuration files, then inspect precedence and remove stale settings.<\/p>\n<h3>Automate a browser with Selenium and Python<\/h3>\n<p>Use the <a href=\"\/blog\/selenium-proxy-python\/\">Selenium proxy setup guide<\/a> for the official WebDriver proxy capability, the authenticated-proxy boundary, session isolation, and exit verification inside the controlled browser.<\/p>\n<h3>Route C# HttpClient through a proxy<\/h3>\n<p>Use the <a href=\"\/blog\/csharp-httpclient-proxy\/\">C# HttpClient proxy guide<\/a> to configure <code>HttpClientHandler<\/code> and <code>WebProxy<\/code>, separate proxy credentials, apply narrow bypasses, and reuse connections.<\/p>\n<h3>Configure Go net\/http<\/h3>\n<p>Use the <a href=\"\/blog\/go-http-proxy\/\">Go ProxyFromEnvironment and NO_PROXY guide<\/a> to choose <code>ProxyFromEnvironment<\/code> or an explicit <code>ProxyURL<\/code>, test <code>NO_PROXY<\/code>, reuse transports, and diagnose CONNECT failures.<\/p>\n<h3>Configure outbound API requests in Postman<\/h3>\n<p>Use the <a href=\"\/blog\/postman-proxy-setup\/\">Postman proxy setup guide<\/a> for custom and system proxy selection, authentication, bypass rules, and request verification.<\/p>\n<h3>Route Node.js fetch with Undici<\/h3>\n<p>Use the <a href=\"\/blog\/nodejs-fetch-undici-proxy\/\">Undici ProxyAgent guide<\/a> to compare local and global dispatchers, environment ownership, tunneling, and bounded fetch checks.<\/p>\n<h3>Configure a PHP service with Guzzle<\/h3>\n<p>Use the <a href=\"\/blog\/php-guzzle-proxy\/\">Guzzle proxy guide<\/a> for protocol-keyed request options, NO_PROXY behavior, credential handling, timeouts, and redacted diagnostics.<\/p>\n<h3>Test PowerShell web and REST requests<\/h3>\n<p>Use the <a href=\"\/blog\/powershell-proxy-setup\/\">PowerShell proxy setup guide<\/a> for explicit proxy parameters, ProxyCredential, environment behavior, and route verification.<\/p>\n<h3>Route a controlled Scrapy crawl<\/h3>\n<p>Use the <a href=\"\/blog\/scrapy-proxy-setup\/\">Scrapy proxy setup guide<\/a> for HttpProxyMiddleware, request metadata, authentication, conservative concurrency, and classified retries.<\/p>\n<h3>Check protocol, authentication, and buying fit<\/h3>\n<p>Review <a href=\"\/blog\/http-https-socks5-proxies\/\">HTTP, HTTPS, and SOCKS5 proxy behavior<\/a> when a library does not use the route you expect. Compare <a href=\"\/blog\/proxy-authentication-username-password-vs-ip-auth\/\">username\/password and IP authentication<\/a> before rotating credentials, and use <a href=\"\/blog\/choose-reliable-proxy-service\/\">the proxy service selection checklist<\/a> before increasing endpoint count.<\/p>\n<h3>Verify the finished client<\/h3>\n<p>Use <a href=\"\/blog\/test-if-your-proxy-is-working\/\">the proxy testing guide<\/a> after changing a client setting so the direct baseline and observed route come from the same application.<\/p>\n<h3>Diagnose a failed request<\/h3>\n<p>Follow <a href=\"\/blog\/common-proxy-errors-fixes\/\">common proxy errors and fixes<\/a> when configuration succeeds but a connection, authentication, TLS, DNS, or destination response still fails.<\/p>\n<h2 id=\"adjacent-hubs\">Prepare, verify, then specialize<\/h2>\n<ul>\n<li>Review types and protocols in <a href=\"\/blog\/proxy-basics\/\">Proxy Basics<\/a>.<\/li>\n<li>Validate the completed setup in <a href=\"\/blog\/proxy-testing-troubleshooting\/\">Proxy Testing and Troubleshooting<\/a>.<\/li>\n<li>Apply the working client to controlled checks in <a href=\"\/blog\/platform-regional-testing\/\">Platform and Regional Proxy Testing Guides<\/a>.<\/li>\n<\/ul>\n<h2 id=\"commercial-next-step\">Choose locations only after one route works<\/h2>\n<p>If country or region is part of the test, compare <a href=\"\/proxy-locations\/\">available Mexela proxy locations<\/a> after the client works with one known endpoint. Keep the selected location, observed location, language, account state, and test time in the result record.<\/p>\n<h2 id=\"faq\">Frequently asked questions<\/h2>\n<div class=\"mexela-faq\">\n<h3>Should credentials go in the proxy URL?<\/h3>\n<p>Only when the client requires that form, and never in committed code, screenshots, shared logs, or shell history. Prefer secret storage and redact diagnostic output.<\/p>\n<h3>Why does a browser work while code fails?<\/h3>\n<p>The clients may use different protocols, DNS paths, certificate stores, authentication formats, or environment settings. Compare them one layer at a time.<\/p>\n<h3>Can system proxy settings cover every application?<\/h3>\n<p>No. Some applications honor them, some expose their own setting, and some bypass them. Verify each client with an observed route check.<\/p>\n<\/div>\n<p><!-- mexela-six-guides-20261012:start --><\/p>\n<h2 id=\"six-tested-developer-guides\">More focused developer setup guides<\/h2>\n<ul>\n<li><a href=\"\/blog\/python-httpx-proxy\/\">Python HTTPX Proxy Setup: Authentication, SOCKS5 and Async Requests<\/a><\/li>\n<li><a href=\"\/blog\/python-aiohttp-proxy\/\">Python aiohttp Proxy Setup: Sessions, Authentication and Timeouts<\/a><\/li>\n<li><a href=\"\/blog\/http-proxy-https-proxy-no-proxy\/\">HTTP_PROXY, HTTPS_PROXY and NO_PROXY: Practical Configuration Guide<\/a><\/li>\n<li><a href=\"\/blog\/github-actions-proxy-api-allowlisting\/\">GitHub Actions Proxy Setup for API Allowlisting<\/a><\/li>\n<li><a href=\"\/blog\/vscode-proxy-setup\/\">VS Code Proxy Setup: Marketplace, Extensions and Terminal<\/a><\/li>\n<li><a href=\"\/blog\/wsl2-proxy-setup\/\">WSL2 Proxy Setup: Windows, Linux and Localhost Troubleshooting<\/a><\/li>\n<\/ul>\n<p><!-- mexela-six-guides-20261012:end --><br \/>\n<!-- mexela-followup-guides-20261012:start --><\/p>\n<h2 id=\"workflow-and-native-php-guides\">Workflow and native PHP setup<\/h2>\n<ul>\n<li><a href=\"\/blog\/n8n-proxy-setup\/\">n8n Proxy Setup: HTTP Request Node, Authentication and Route Checks<\/a><\/li>\n<li><a href=\"\/blog\/php-curl-proxy\/\">PHP cURL Proxy Setup: Authentication, HTTPS CONNECT and Safe Diagnostics<\/a><\/li>\n<\/ul>\n<p><!-- mexela-followup-guides-20261012:end --><br \/>\n<!-- mexela-developer-kit-20261012:start --><\/p>\n<h2 id=\"developer-examples-download\">Download the developer examples<\/h2>\n<p><a href=\"\/blog\/wp-content\/uploads\/2026\/10\/mexela-developer-examples-20261012-v1.zip\">Download the developer examples ZIP<\/a> for the locally tested Python clients, environment checks, CI route-check files and native PHP cURL helper. The n8n workflow in this October 12 archive remains the original illustrative reference. The <a href=\"\/blog\/n8n-proxy-setup\/\">updated n8n guide<\/a> separately documents 17 native workflow-engine checks from October 13; editor import and scheduling remain untested. Read the included README for runtime versions, setup and the limits of each check.<\/p>\n<p>ZIP SHA-256:<\/p>\n<div class=\"mexela-article-content\">\n<pre><code>3a43f7d1e6cbb9b2917dbcf88aaa8fe1a2733c33326187cb89c9a9119aad3e20<\/code><\/pre>\n<\/div>\n<p>Keep real proxy credentials and destination secrets in your approved secret store; they are absent from this archive. Start with one approved destination and compare its observation with a direct baseline.<\/p>\n<p><!-- mexela-developer-kit-20261012:end --><br \/>\n<!-- mexela-next-six-20261013:start --><\/p>\n<h2 id=\"java-and-rust-proxy-guides\">Tested Java and Rust HTTP clients<\/h2>\n<ul>\n<li><a href=\"\/blog\/java-httpclient-okhttp-proxy\/\">Java Proxy Setup: HttpClient and OkHttp Authentication<\/a><\/li>\n<li><a href=\"\/blog\/rust-reqwest-proxy\/\">Rust reqwest Proxy Setup: Authentication, HTTPS CONNECT and TLS<\/a><\/li>\n<\/ul>\n<p><!-- mexela-next-six-20261013:end --><\/p>\n<h2 id=\"public-source-repository\">Versioned public example sources<\/h2>\n<p>The <a href=\"\/blog\/proxy-code-examples-repository\/\">public example repository<\/a> groups Java, Rust, Python, PHP and n8n source files with exact runtime versions, setup instructions, source hashes and the limits of the recorded local checks. Download its source ZIP or clone its read-only Git snapshot before adapting one client.<\/p>\n<p><!-- mexela-generator-link-20261014:start --><\/p>\n<section aria-labelledby=\"generator-link-731\">\n<h2 id=\"generator-link-731\">Generate one HTTP proxy request<\/h2>\n<p>Use the <a href=\"\/blog\/proxy-config-generator\/\">browser-based proxy configuration generator<\/a> for five clients: Python Requests, cURL, Node.js\/Undici, <a href=\"\/blog\/proxy-config-generator\/#generator-php-heading\">PHP cURL<\/a> and <a href=\"\/blog\/proxy-config-generator\/#generator-powershell-heading\">PowerShell 7 HttpClient<\/a>. Every card configures an HTTP proxy and an HTTPS destination. Code generation is local; follow the recorded client\/version scope and verify your own authorized request.<\/p>\n<\/section>\n<p><!-- mexela-generator-link-20261014:end --><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Configure proxies in browsers, operating systems, pip, Selenium, C# HttpClient, Go, cURL, Python, and Node.js, then verify the intended route.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"_links":{"self":[{"href":"https:\/\/mexela.com\/blog\/wp-json\/wp\/v2\/pages\/731"}],"collection":[{"href":"https:\/\/mexela.com\/blog\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/mexela.com\/blog\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/mexela.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mexela.com\/blog\/wp-json\/wp\/v2\/comments?post=731"}],"version-history":[{"count":7,"href":"https:\/\/mexela.com\/blog\/wp-json\/wp\/v2\/pages\/731\/revisions"}],"predecessor-version":[{"id":997,"href":"https:\/\/mexela.com\/blog\/wp-json\/wp\/v2\/pages\/731\/revisions\/997"}],"wp:attachment":[{"href":"https:\/\/mexela.com\/blog\/wp-json\/wp\/v2\/media?parent=731"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}