cURL is a command tool that allows for data transfer. It is widely used because of the simple syntax. You can use cURL to write simple or complex scripts requiring authentication, cookies, proxy tunneling, SSL connections, and others. 

Have you ever been unable to access a website due to geographical restrictions? One of the most effective solutions is to route your network traffic through a proxy server.  

Therefore, this guide will examine how to use cURL with proxy, common challenges and best practices to solve them as well as the best types of proxy servers.

How to Use cURL with ProxyHow to Use cURL with Proxy

Here are the steps you can follow to use cURL with proxy regardless of your device:

Install cURL on your device

The first step is to download and install cURL on your device, whether you are using Windows, Linux, or macOS. Let us consider the installation process of each of the devices:


As a Linux user, the specific distribution of your device determines how you will install cURL. Fedora and Ubuntu are some of the most common Linux distributions and come with cURL by default. Therefore, you can use it directly from the terminal. 

On the other hand, distributions like Debian-based OS do not come with the package by default. However, you can install it via this command:

sudo apt-get install curl


Working with cURL on macOS is quite easy and straightforward because the tool comes with the system. Therefore, you can use cURL in the Terminal application.


While there are various versions of Windows, if your operating system is at least Windows 10, it will come with a copy of cURL. However, this cURL command is an alias for the PowerShell Invoke-WebRequest command. Therefore, to avoid this inconsistency, you can replace cURL with curl exe like this:

curl.exe –version

Understanding the syntax of a proxy URL

Since proxies act as an intermediary between your device and the target server, they optimize anonymity and minimize restrictions. Subsequently, the target server will see the location associated with the proxy IP address as your actual one has been masked. 

Regarding how to use cURL with proxy, you need access to the syntax of a proxy URL as shown below:


Let us examine the components of the proxy URL:

  • <PROTOCOL>: This is the protocol required to connect to the proxy. http:// is the default cURL protocol, which will automatically be used if you do not specify a protocol.
  • <HOST>: The URL or IP address of the proxy hostname.
  • <PORT>: This is the port number that corresponds with the proxy server. cURL will use 1080 by default if you do not specify the port number.
  • <USERNAME>: When using a paid proxy server, you need to provide your username as part of the authentication process.
  • <PASSWORD>: The password is required to authenticate the proxy server.

The most popular proxy protocols are HTTP, HTTPS, and SOCKS. HTTP is the most common cURL proxy protocol. It handles unencrypted web traffic, and its use cases include web scraping and general web browsing. 

Very similar to the HTTP, is the HTTPS protocol offers encrypted and secure connections. Unlike the HTTP, using it ensures online data security between your client and proxy server. 

SOCKS protocols are another widely used option in cURL. It channels your network traffic through proxies via TCP connections. There are two versions- SOCKS4 and SOCKS5. The former is more versatile than HTTP protocols but lacks built-in encryption. On the other hand, SOCKS5 is an advanced protocol, and it adds support for UDP traffic and authentication. In addition, it offers more flexibility and security for UDP and TCP traffic.

While there are several free proxies in the market, they are best for the learning process. Some of the disadvantages of using free proxies are that they are largely unreliable, slow, short-lived, and come with a high chance of compromising your online security. 

Therefore, you need to choose premium solutions like NetNut, which offers industry-leading proxy servers. You can enjoy ultra-fast speed without sacrificing anonymity, security, and data privacy. Subsequently, these proxies require authentication so you need to include a valid username and password.

For example: the protocol is http, the host is, the port is 8080, the username is CID-2345, and the password is Bab3l. Therefore, the proxy URL will be something like this:

http://CID-2345:@Bab3l10.111.201.101: 8080 

How to specify HTTP/HTTPS proxy in cURL

To specify the proxy protocol, you need to understand the basic cURL syntax as shown below:

 curl [optional_commands] <URL>

One of the best practices to consider when writing codes in cURL is to use double quotes for URLs. This is necessary to avoid issues with special characters that may interfere with the syntax.

Before you start working, you need to launch this command in your terminal:

curl “”

Subsequently, the HTTPBin project provides details about HTTP requests. In other words, the /ip returns the origin IP of the request, which originates from your device (your IP )

{“origin”: “”}

However, after successful configuration of the proxy server, your actual IP address is hidden so you can only see the proxy IP. 

Here are some of the ways you can specify an HTTP/HTTPS proxy in cURL.

Using command line arguments

When using cURL, there are two options to set a proxy URL via the command line arguments. They include:

  • -x
  • –proxy

These two command line arguments do the same thing, so they can be used interchangeably. You can use the following code for the command line arguments:



curl –proxy [<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>] <URL>

Bear in mind that command line options in cURL are case-sensitive. Therefore, “–Proxy” is different from “–proxy.”

Now, let us launch the proxy with the command line arguments:

curl -x “http:// 103.203.109:9321” “”


curl –proxy “http:// 103.203.109:9321” “”


This is what you should get:

{“origin”: “103.203.109”}

From the result, the origin reflects the proxy server IP- the target site sees the request as originating from the proxy.

Using environment variables

You can use environment variables to add a proxy in cURL. There are two variables, and they include:

  • http_proxy: The URL of the proxy server uses the HTTP protocol
  • https_proxy: The URL of the proxy server uses the HTTPS protocol. 

Linux and macOS users can set these two environment variables with the following syntax:

Export http_proxy=”[<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]”

export https_proxy=”[<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]”

When you want to turn off the cURL proxies, you can unset the environment variables with:

 unset http_proxy

unset https_proxy

Windows users can use this Powershell syntax to set up the proxies with the environment variables: 

$env:http_proxy = “[<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]”

$env:https_proxy = “[<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]”

If you want to turn off the cURL proxies, use this code:

$env:http_proxy = “”

$env:https_proxy = “”

Once you turn off the cURL proxies, the will reflect your actual IP address instead of the proxy IP. 

Using a configuration file [.curlrc]

A configuration file is a text file that contains your cURL settings. These settings will be saved in the .curlrc file format on your system so it can be accessible when you run the cURL commands. In addition, creating a configuration file is an excellent choice if you want to use cURL with a proxy repeatedly for collecting large volumes of data.

You can create a .curlrc configuration file to specify the proxy in cURL. For macOS and Linux users, you need to open the terminal and find your home directory via cd~. 

The next step is to access the .cURLrc via nano with:

nano .curlrc

Add the proxy details to the .curlrc file with the following syntax:


For example:

proxy=”http:// 103.203.109:9321″

Windows users need to create a _.curlrc file with the same content within the %APPDATA% directory. Paste the %APPDATA% in the file explorer address bar and select ENTER to access the directory. This will bring you to C:\Users\<YOUR_USER>\AppData\Roaming.

cURL automatically uses the proxy indicated in the configuration file:

curl “”

Using SOCKS Proxies in cURL

Apart from http and https proxies, cURL also supports SOCKS5 proxies. The command syntax for SOCKS proxies is:


While it is quite similar for http and https proxies, the difference lies in the <PROTOCOL>, which will either be socks4, socks4a, socks5, or socks5h. For example, if you are working with socks5 proxy in cURL:

curl -x “socks5:// 103.203.109:9321 “”

Alternatively, you can use the “- -socks4, – -socks4a, – -socks5” command line options instead of the –x command. The syntax will look like this:

 curl –socks4|–socks4a|–socks5 <HOST>[:<PORT>] <URL> –proxy-user <USERNAME>:<PASSWORD>

Here, you need to set the proxy URL without the username and password after the option and the credentials after the – -proxy-user. For example, let us use the – -socks option:

curl –socks5 “103.203.109:9321 “” –proxy-user CID-2345:Ba3l 

Troubleshooting Common Challenges Associated with Using cURL with ProxiesTroubleshooting Common Challenges Associated with Using cURL with Proxies

As with any other function, challenges when using cURL with proxy. However, understanding these challenges makes it easier to solve them. Therefore, in this section, we shall examine common challenges and possible solutions.

Connection issues 

Since proxies act as an intermediary between your browser and the target server, cURL can return errors when the request does not get to the server. You could receive a message like “Failed to connect to proxy server” or “Could not resolve host.” Bear in mind that some connection failures could be temporary, such that they are quickly resolved while others are not. 

You can tackle this challenge by verifying the proxy details. Go over the proxy dashboard to double-check the IP and port details. Sometimes, a missing or wrong figure could be the cause of the connection failure.

Secondly, check your internet connection. Ensure your device is connected to a stable and fast connection that can transmit your request to the target server. Alternatively, you may need to modify your firewall settings to allow the proxy server to connect to the target server.

Slow performance

One of the challenges of using cURL with proxy is slow performance. Depending on the type of proxy and configuration, you may notice some delay when using cURL with proxy. 

You may need to try a different proxy for optimized performance because the current one may be overloaded with requests. A useful tip for choosing proxies is to consider the proximity to your actual location. Sometimes, when you use cURL proxies far from your location, it could cause slow performance. 

In addition, check the bandwidth limitations before using a proxy with cURL. Since some providers put limitations on proxies, you can ask for an upgrade to optimize performance speed.

Timeout errors

When cURL commands end in timeout errors, it means that the server did not respond within the expected duration. In simpler terms, the connection is established, and the request is being processed, but the target server does not return a response within a predefined time. 

The best way to tackle this challenge is to adjust timeout settings. You can use the  -connect-timeout and –max-time options to increase the timeout setting. Alternatively, the target website may be experiencing high traffic, so you need to be patient and try again later.

Free proxies are often unreliable and can trigger timeout errors. Therefore, you need to use premium proxy servers like NetNut to ensure your connection is stable and you can resolve the issue.

Authentication errors

 Authentication errors occur when cURL proxy authentication fails. Sometimes when you send a request to a target server, you can get a message like 407 Proxy Authentication Required. Other forms of authentication failures are quite subtle as the request seems to be successful but the response is not what you need because the proxy server did not authenticate your request correctly.

To resolve this, you need to confirm that you are using the right authentication details which includes username and password for your proxy server. It is not uncommon to confuse the login details with the authentication details. 

In addition, ensure your authentication details are written in the correct cURL syntax via the 

-proxy-user option. Since your authentication credentials contain sensitive data, it is best to use HTTPS or SOCKS5 proxies to safeguard them from cyber theft.

SSL/TLS handshake errors 

Errors related to SSL or TLS occur when cURL does not establish a secure connection. It could be an SSL certificate problem, which could occur when cURL proxy is unable to get local issuer certificate. Alternatively, it could be that TLS handshake failed. 

The way to solve this problem is to ensure your system’s CA are up to date. cURL relies on these certificates to verify the SSL/TLS connections. In addition, you may need to confirm that your proxy supports HTTPS connections and is configured for SSL/TLS traffic.

The Best Proxies for cURLThe Best Proxies for cURL

The choice of cURL proxy can significantly affect your network performance. Here are some of the cURL proxy types you can use: 

Rotating residential proxies

These are some of the best options for a cURL proxy. Rotating residential proxies are associated with real physical addresses. In other words, these proxies are the same type of IP address that internet service providers issue. Therefore, they are less likely to be identified and blocked by anti-bot technology on a server.

NetNut residential proxies are ethically sourced and automatically rotate your IP address at timely intervals to mimic the activities of humans. In addition, they provide excellent protection against IP bans which allows you to perform your tasks without limitations.  

Datacenter proxies

Datacenter proxies are another alternative, but they differ from residential proxies in that they are not associated with real addresses. Since these proxies originate from datacenters, they are quite fast. However, they can easily be detected and banned from certain websites. Before you use datacenter proxies, review the target website’s robots.txt because datacenter traffic is blocked from some websites. One useful tip for using datacenter proxies is to choose a reliable provider with a lot of subnet diversity.

NetNut datacenter proxies are exceptional in terms of speed and anonymity. With over 150,000 global IPs across 200 countries, you have a large pool of IPs to choose from. 

Mobile proxies

With over 250,000 IPSs in more than 100 countries, NetNut mobile proxies support 3G/4G/5G/LTE networks. Although they are usually more expensive than datacenter proxies, they are more reliable and provide increased anonymity, security, and privacy. In addition, you can target specific regions to ensure you can extract data with geo-precision.

NetNut’s mobile proxies stand out because they offer real phone IPs and auto-rotation features for optimized efficiency. You can say goodbye to CAPTCHA blocks for a seamless online experience. If you want to scale your traffic with a stable proxy network without compromising on speed, then NetNut mobile proxies are the best solution. 


We hope you have learned how to use cURL with proxy at this stage of the article. cURL has endless applications for data collection and web interaction. However, using cURL with proxy is a great way to optimize your experience with this command tool. The use of proxy servers is crucial to avoiding IP blocks and accessing geo-restricted or censored content. 

While cURL may have a simple syntax, there are several challenges like connection failures, authentication issues, slow performance and more. This guide has examined practical solutions to help you resolve them.

Remember that free proxies are not reliable, so you need to choose an industry-leading provider like NetNut that offers automatic IP rotation to reduce the chance of IP block. One reason to choose NetNut is that we offer competitive prices with transparent pricing models. Contact us today to get started.

Frequently Asked Questions

What is a proxy server?

A proxy server acts as an intermediary between your device (via browser or app) and a website. Proxies transfer traffic between the two ends while providing security and safeguarding the integrity of data. Subsequently, using a proxy server encrypts your network traffic for several purposes – monitoring employee internet use, censoring content available for students, and preventing intrusion of a third party into your home network. 

Proxy in literal terms translates to acting on behalf of another. Therefore, the proxy server receives the request from your device, evaluates it, and forwards it to the target website. Subsequently, the proxy server receives the response returned from the target website before forwarding it to your device. As a result, the use of proxies provides a higher-level of anonymity and data security.

Why should I use cURL?

One of the primary reasons developers opt for cURL is because of its capacity to handle complex operations. cURL is versatile, scriptable, and has a library that allows you to extract elements without writing any HTTP parsing code.

Here are some other reasons why you should use cURL:

  • A great tool for debugging and testing endpoints
  • Provides excellent error logging
  • cURL supports numerous protocols
  • You can limit the frequency of request
  • Provides information on the data sent or received
  • It supports HTTPS and performs SSL certification by default
  • The URL syntax relies on the protocol
  • Supports automatic decompression, http2, Content-Encoding, gzip, and Metalink
  • Automatically switches to another protocol if the default is not working.

What protocols does cURL support?

cURL supports over 20 protocols, which cover all proxy server applications. Therefore, you need to specify the protocol in the URL, or it will use the default HTTP protocol. Other protocols supported by cURL include HTTPS, SOCKS, SMTP, POP3, IMAP, and others. 

How To Use cURL With Proxy- NetNut
Full Stack Developer
Ivan Kolinovski is a highly skilled Full Stack Developer currently based in Tel Aviv, Israel. He has over three years of experience working with cutting-edge technology stacks, including MEAN/MERN/LEMP stacks. Ivan's expertise includes Git version control, making him a valuable asset to NetNut's development team.