If you‘re a webmaster or developer involved in web scraping, you‘ve likely heard of wget. It‘s one of the most popular and powerful command-line utilities for downloading files and web pages. Over 83% of data engineers use command-line tools like wget for acquiring data, according to a 2023 survey by Oxylabs.
But while wget is incredibly useful out of the box, its true power shines when combined with proxies. By routing wget requests through a proxy server, you can scrape websites at massive scale without getting your IP address blocked. In this guide, we‘ll take an expert-level deep dive into using wget with proxies in 2024.
Why Use Wget for Web Scraping?
Before we jump into configuring proxies, let‘s recap what makes wget so useful for web scraping:
- It‘s command-line based, so you can easily automate and schedule scraping tasks.
- It supports recursive downloading, so you can mirror entire websites.
- It can resume interrupted downloads, saving time and bandwidth.
- It supports wildcards and patterns for selectively downloading files.
- It can convert absolute links to relative, making offline browsing of downloaded pages easier.
In a benchmark test by ScrapeOps, wget was able to download a 10MB file in an average of 2.1 seconds, compared to 2.4 seconds for curl and 3.2 seconds for PowerShell. So it‘s both full-featured and fast.
Installing Wget
Wget comes pre-installed on most Linux distributions. But if you‘re on macOS or Windows, you‘ll likely need to install it yourself. Here‘s how:
macOS
The easiest way to install wget on macOS is using Homebrew:
brew install wget
If you don‘t have Homebrew installed, you can install it from brew.sh, or use MacPorts:
sudo port install wget
Windows
On Windows, you have a few options:
- Use the Windows Subsystem for Linux and install wget in the Linux environment.
- Download a pre-compiled binary from eternallybored.org/misc/wget/.
- If you have Cygwin installed, you can install wget from the Cygwin installer.
Once installed, you should be able to run wget from the command prompt or PowerShell.

With wget installed, let‘s look at how to configure it to use a proxy.
Setting a Proxy for Wget
There are three primary ways to set a proxy for wget:
- Using environment variables
- Using command-line flags
- Using a .wgetrc file
Let‘s explore each of those in depth.
Using Environment Variables
The simplest way to specify a proxy is through the http_proxy and https_proxy environment variables.
On Linux or macOS, you can set them in your shell like this:
export http_proxy="http://username:password@proxy_ip:port"
export https_proxy="https://username:password@proxy_ip:port"
Replace username, password, proxy_ip, and port with your actual proxy credentials.
On Windows, you can set environment variables through the command prompt:
set http_proxy=http://username:password@proxy_ip:port
set https_proxy=https://username:password@proxy_ip:port
Or through PowerShell:
$Env:http_proxy="http://username:password@proxy_ip:port"
$Env:https_proxy="https://username:password@proxy_ip:port"
Once set, wget will automatically route requests through the specified proxy.
Note that these variables will apply to your entire shell session. To make them persist, you can add those export lines to your .bashrc or .bash_profile on Linux/macOS, or set them through the System Properties > Environment Variables GUI on Windows.
Using Command-Line Flags
If you need to specify a proxy for a single wget command, you can use the -e flag:
wget -e use_proxy=yes -e http_proxy=http://username:password@proxy_ip:port url
This will only apply the proxy to that specific wget command.
You can also use --proxy-user and --proxy-password to specify the proxy credentials without including them in the URL:
wget -e use_proxy=yes -e http_proxy=http://proxy_ip:port --proxy-user=username --proxy-password=password url
This can be useful if you‘re scripting wget and don‘t want to hardcode credentials.
Using a .wgetrc File
For more advanced and persistent configuration, you can create a global or user-specific .wgetrc file. This lets you specify default settings for wget, including proxies.
To set a global proxy, create or edit /etc/wgetrc (on Linux/macOS) or C:\Program Files (x86)\GnuWin32\etc\wgetrc (on Windows) and add lines like this:
use_proxy=yes
http_proxy=http://username:password@proxy_ip:port
https_proxy=https://username:password@proxy_ip:port
To set a user-specific proxy, create or edit ~/.wgetrc (on Linux/macOS) or %USERPROFILE%\wgetrc (on Windows) with the same lines.
Now wget will use those proxy settings by default for all requests.
Testing Your Proxy Configuration
To test if your proxy is working, you can use a site like ipchicken.com to see your public IP address:
wget -qO- ipchicken.com
If the reported IP matches your proxy IP, it‘s working. If it shows your real IP, the proxy isn‘t configured correctly.

You can also use the --debug flag to have wget print detailed debug output, which can help troubleshoot proxy issues:
wget --debug url
Look for lines mentioning "Proxy request sent" or "Proxy tunneling failed" to identify potential issues.
Common Wget Proxy Issues and Fixes
While configuring a proxy for wget is usually straightforward, there are a few common issues you might encounter:
SSL Certificate Errors
If you get an error like "certificate verify failed", it means wget couldn‘t verify the SSL certificate of either the proxy server or target website.
To ignore SSL errors and proceed anyway, use the --no-check-certificate flag:
wget --no-check-certificate -e use_proxy=yes -e https_proxy=https://username:password@proxy_ip:port url
Use this carefully, as it bypasses an important security check. But it can be useful for testing or when using self-signed certificates.
Protocol Mismatch Errors
If you get a "Proxy tunneling failed: Bad gateway" error, it often means there‘s a mismatch between the proxy URL scheme and the target URL scheme.
For example, if you set http_proxy but try to download an HTTPS URL, it will fail. Make sure to set both http_proxy and https_proxy variables appropriately.
Also check that your proxy supports the HTTP CONNECT method for tunneling HTTPS traffic. Some older proxy servers only support HTTP GET requests.
Choosing a Proxy Provider for Web Scraping
To do web scraping at scale, you‘ll likely want to use a paid proxy service rather than public free proxies. Free proxies are often slow, unreliable, and quickly get banned by websites.
Based on my testing and experience, some of the best proxy providers for web scraping in 2024 are:
| Provider | Proxy Types | Locations | Concurrency | Price |
|---|---|---|---|---|
| BrightData | Data center, Residential, Mobile | Global | High | $15/GB+ |
| Smartproxy | Residential | 195+ countries | Very high | $75/5GB+ |
| IPRoyal | Data center, Residential | 150+ countries | Medium | $3/GB+ |
| PacketStream | Residential | Global | Medium | $50/50GB+ |
The right provider will depend on your specific needs for location targeting, concurrency (number of parallel requests), and budget. In general, residential proxies like Smartproxy or BrightData are best for large-scale scraping without getting blocked.
Whichever provider you choose, rotating your IP addresses and using reasonable request rates will minimize the chances of bans. Using a .wgetrc file to set proxies and --random-wait to add delays between requests is a good basic setup:
use_proxy=yes
https_proxy=https://username:password@proxy_ip:port
wait=on
waitretry=on
random_wait=on
wget --random-wait url
Conclusion and Further Resources
In this ultimate guide, we‘ve covered everything you need to know to expertly configure and use wget with a proxy server for web scraping. From basic environment variable setup to advanced .wgetrc settings and choosing the right provider, you‘re now equipped to scrape at scale without fear of IP bans.
Some key takeaways:
- Use
http_proxyandhttps_proxyenvironment variables for basic proxy configuration. - The
-eflag lets you specify proxy settings for a single wget command. - A .wgetrc file allows for more persistent and advanced proxy defaults.
- Residential proxy providers like BrightData and Smartproxy are best for large scale scraping.
- Always test your proxy setup and use
--debugto troubleshoot issues.
With these tips and best practices, you‘re ready to take your web scraping projects to the next level. So go forth and scrape responsibly!
If you‘d like to learn more, check out these additional resources:
- Official wget manual: https://www.gnu.org/software/wget/manual/wget.html
- Our detailed comparison of the top 10 proxy providers: https://example.com/best-proxies
- A free proxy testing tool to check for leaks and errors: https://ipleak.net/
Happy scraping!
