Main Website
Web Scraping
Updated on
June 28, 2024

Proxy in cURL: 3 Effective Setup Methods Explained

When working with cURL, a powerful command-line tool for transferring data across a wide range of protocols, using a proxy can be crucial for various reasons, including privacy, security, and bypassing geo-restrictions. In this article, we will explore three effective methods to set up a proxy in cURL, ensuring your data transfers are efficient and secure. These methods include using HTTP proxies, specifying SOCKS5 proxies, and implementing rotating residential proxies. Moreover, we’ll delve into advanced proxy configurations and troubleshoot common issues, ensuring you have a comprehensive understanding of proxy usage in cURL.

Jump quickly to a section relevant to you:


Before diving into the methods of using proxies with cURL, there are a few prerequisites you need to have in place:

1. cURL Installed: Ensure that cURL is installed on your system. You can check if it's installed by running the following command in your terminal or command prompt:

curl --version

If cURL is not installed, you can download and install it from the cURL website.

2. Basic Knowledge of cURL Commands: Familiarize yourself with the basic cURL commands and options. Understanding how to make simple GET and POST requests will help you grasp the proxy concepts more easily.

3. Proxy Server Information: You need to have the details of the proxy server you plan to use. This includes:

  • Proxy Server Address: The IP address or hostname of the proxy server.
  • Port Number: The port on which the proxy server is listening.
  • Authentication Details (if required): Username and password for proxy authentication.

3 Methods of using proxy with cURL

Let’s cover three distinct methods for using proxies with cURL to enhance your data transfer capabilities.

Method 1: Using HTTP proxy

HTTP proxies are one of the most common types of proxies used for routing web traffic. They act as intermediaries for HTTP and HTTPS requests, allowing you to mask your IP address, enhance privacy, and potentially bypass geo-restrictions.

Using a single proxy example

To use an HTTP proxy with cURL, you can specify the proxy server's address and port using the -x or --proxy option. Here’s a simple example of using an HTTP proxy:

curl -x

Here’s an example of using an HTTPS proxy:

curl -x

In these commands:

  • is the address of the proxy server.
  • 8080 is the port number the proxy server is listening on.
  • and are the target URLs.

Proxy authentication

Some proxy servers require authentication, meaning you must provide a username and password to use them. You can supply these credentials using the -U or --proxy-user option in cURL.

HTTP Proxy with Authentication Example:

curl -x -U username:password

HTTPS Proxy with Authentication Example:

curl -x -U username:password

In these commands:

  • is the address of the proxy server.
  • 8080 is the port number the proxy server is listening on.
  • and are the target URLs.

This command authenticates with the proxy server for an HTTPS request, ensuring that both the authentication details and the request itself are securely handled.

Method 2: Specifying to use SOCKS5 proxy

SOCKS5 proxies offer more flexibility and performance advantages over HTTP proxies, supporting a wider range of protocols and better handling complex traffic patterns. This method is particularly useful for scenarios where you need to route traffic through different types of protocols, such as FTP or SSH, in addition to HTTP and HTTPS.

Using a single SOCKS5 proxy

To use a SOCKS5 proxy with cURL, you can specify the proxy server's address and port using the --socks5 option. Here’s a basic example:

curl --socks5 socks5://

  • --socks5 socks5:// option specifies that cURL should use the SOCKS5 proxy at on port 1080.
  • This is the target URL you want to access through the proxy.

SOCKS5 proxy with authentication

Some SOCKS5 proxies require authentication. You can provide the username and password by appending them to the proxy URL. Here’s an example:

curl --socks5 socks5://

  • --socks5 socks5:// This specifies the SOCKS5 proxy with authentication details included in the URL.

Manually changing proxies using proxy list configuration

In some scenarios, you might need to change proxies dynamically, especially if you have a list of proxies to cycle through. This approach is beneficial for web scraping, load balancing, or avoiding detection by rotating your IP addresses. Here’s are the steps to use a proxy guide:

Prepare a proxy list file

Create a file named proxies.txt that contains a list of SOCKS5 proxies. Each line should have one proxy in the following format:


Shell script to rotate proxies

Create a shell script that reads from the proxy list and uses each proxy for a cURL request. Save this script as


# Path to the proxy list file

# Target URL

# Loop through each proxy in the proxy list
while IFS= read -r proxy; do
    echo "Using proxy: $proxy"
    curl --socks5 "$proxy" "$url" -o output_$(date +%s).html
    sleep 2 # Pause for 2 seconds before the next request
done < "$proxy_list"

This bash script automates HTTP requests through multiple SOCKS5 proxies listed in proxies.txt. It targets, reads each proxy from the file, and makes a cURL request using the current proxy. The response is saved to a timestamped HTML file. To prevent server overload, the script pauses for 2 seconds between requests, looping through all proxies in the list.

Run the shell script

Make the script executable and run it:

chmod +x

Method 3: Rotating residential proxies

Rotating residential proxies provide a dynamic way to change IP addresses during web scraping or data extraction tasks. These proxies offer a pool of IP addresses sourced from residential networks, which can help avoid IP blocking and enhance anonymity.

Using rotating residential proxies

To utilize rotating residential proxies effectively with cURL, you typically subscribe to a service that manages the proxy rotation for you. Here’s a general approach to integrate rotating residential proxies into your workflow:

  1. Subscription to a Rotating Residential Proxy Service: Sign up for a rotating residential proxy service that provides an API or endpoint to access their proxy pool.
  2. API Endpoint Configuration: Obtain the API endpoint or configuration details provided by the proxy service. This endpoint will be used to fetch a rotating IP address from the proxy pool.
  3. Integrating with cURL: Use cURL to make requests through the rotating residential proxy. You will fetch a new IP address with each request, cycling through the proxy pool.

Here’s a simplified example of how you might integrate rotating residential proxies into your cURL commands:


# Example API endpoint to fetch rotating residential proxies

# Target URL

# Loop through multiple requests, each using a different proxy from the pool
for (( i=1; i<=10; i++ )); do
    # Fetch the rotating proxy IP address from the API
    proxy=$(curl -s "$api_endpoint")

    # Use the retrieved proxy to make a request to the target URL
    echo "Request $i using proxy: $proxy"
    curl --proxy "$proxy" "$url" -o output_$i.html

    # Optional: Add a delay between requests to avoid rate limits or server overload
    sleep 5  # Adjust the delay based on service limitations and requirements

  • api_endpoint="": Replace with the actual API endpoint provided by your rotating residential proxy service.
  • for (( i=1; i<=10; i++ )): Loop through 10 requests (adjust as needed).

Advanced proxy configuration

Using proxies with cURL provides a powerful way to manage and route web traffic, but advanced configurations can further enhance your capabilities. This section covers how to modify HTTP headers and an additional advanced tip to optimize your proxy usage.

Modifying request HTTP headers

Modifying HTTP headers is crucial when dealing with proxies, as it allows you to customize your requests to better mimic real user behavior, avoid detection, and handle specific requirements of the target server. Here’s an example of modifying user-agent and adding custom headers:

curl -x \
     -U user123:pass123 \
     -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" \
     -H "Accept-Language: en-US,en;q=0.9" \
     -H "Referer:" \ -o output.html

This cURL command makes an HTTP request to using an HTTP proxy with authentication user123:pass123. It sets a custom User-Agent to mimic a specific browser, adds Accept-Language and Referer headers, and saves the response to output.html.

Using persistent sessions with cookies

Maintaining session state across multiple requests is essential for web scraping or interacting with websites that require login. You can achieve this by using cookies to preserve session data.

Here’s how to use cookies with cURL:

Initial login request with cookies

curl -x \
     -U user123:pass123 \
     -c cookies.txt \
     -d "username=myusername&password=mypassword" \ -o login_response.html

This cURL command makes an HTTP POST request to through an HTTP proxy with authentication user123:pass123. It sends login credentials, saves cookies to cookies.txt, and stores the response in login_response.html.

Subsequent requests using saved cookies

curl -x \
     -U user123:pass123 \
     -b cookies.txt \
     -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" \ -o protected_page.html

This approach ensures that your session state is preserved across multiple requests, allowing you to navigate through authenticated areas of a website seamlessly.

Fixing common issues when using proxies with cURL

When working with proxies in cURL, several common issues can arise that may disrupt your operations. Understanding and addressing these issues promptly can help ensure smooth functionality. Below are solutions for handling incorrect proxy formats, authentication issues, proxy type support, and timeout errors.

Incorrect proxy format

If the proxy server address or format is incorrect, cURL will fail to connect to the proxy.

curl -x http//

Solution: Ensure that the proxy address is specified correctly with the correct protocol (http:// or https://) and includes the port number (:8080 in this case).

Correct the command:

curl -x

Authentication issues

Authentication errors occur when the provided credentials for the proxy server are incorrect or missing. Common error codes include:

  • HTTP/1.1 407 Proxy Authentication Required
  • HTTP/1.1 401 Unauthorized

Solution: Ensure that you provide the correct username and password for proxy authentication. Use the -U or --proxy-user option with cURL to specify credentials. 

Here’s an example:

curl -x -U username:password

Proxy type support

cURL supports various proxy types, including HTTP, HTTPS, SOCKS4, and SOCKS5. If you encounter issues related to unsupported proxy types, ensure you are using the correct proxy type syntax (http://, socks4://, socks5://, etc.) and that your proxy server supports the chosen type.

Solution: Specify the correct proxy type using the appropriate cURL options (-x for HTTP/HTTPS, --socks4 or --socks5 for SOCKS proxies).

Here’s an example with SOCKS5 proxy:

curl --socks5 socks5://

Timeout errors

Timeout errors occur when cURL fails to establish a connection or receive a response from the proxy or target server within the specified time limit.

Solution: Adjust the timeout settings using the --connect-timeout and --max-time options in cURL to increase the allowed connection and request times. Here’s an example with increased timeout settings:

curl -x --connect-timeout 10 --max-time 30

  • --connect-timeout 10: Sets the connection timeout to 10 seconds.
  • --max-time 30: Sets the maximum time for the entire operation to 30 seconds.


Learning proxy configurations in cURL enables seamless web scraping operations, enhancing anonymity and overcoming access restrictions. By addressing common issues and optimizing settings, you can ensure reliable connectivity and efficient data retrieval. Continuously refining your proxy strategies will help maintain optimal performance in all your web interactions.