A picture with white and blue lettering on it

Whether you scrape the web or use an API, it’s all about sending HTTP requests and getting responses. The more specified your request is, the more precise data you get. That’s why you need headers. They come as key-value pairs separated by a column and are parts of an HTTP response that carry additional details, such as content type or caching instructions. Headers help you get the details you need or filter responses so you never see irrelevant ones. In this article, we’ll learn the practical basics of sending HTTP headers with cURL and how it can help you with your tasks.

Why cURL?

Now that you know what HTTP headers are, let’s briefly discuss cURL. It’s a command-line, easy-to-use tool for transferring data to the target server and back to your computer, which makes it a well-suited tool for sending headers. Among its advantages are the following:

  • It’s lightweight
  • Supports many protocols, including HTTP(S), SMTP, FTP, and more
  • Doesn’t require additional libraries
  • Is compatible with the most-used operating systems like Windows, Linux, and macOS
  • Is free to use and often comes pre-installed
  • Has detailed documentation and a huge community of users, so if you face difficulties, you will quickly find a solution.

That’s why cURL is so widely utilized, even with numerous other tools that allow sending HTTP headers.  

When to send HTTP headers

Now that you’re familiar with all the instruments let’s examine the use cases for sending HTTP headers.

  • Authentication and authorization

When you call an API or request some content that requires authorization, you may need to provide a token or whatever to get data. Sending the Authorization header with cURL will give the necessary information for a server to let you in. You need to use the -H option in your request. Below, you can see an example of the cURL request to httpbin.org, which is a special request and response service. 

Example of sending the Authorization header
  • Content negotiation

When you send content in a specific format like JSON or XML and need a server to interpret it correctly, you need to include the Content-type HTTP header in your request. The target server will know how to process the content to minimize the possibility of errors or delays.

Example of sending the Content-type header
  • CORS (Cross-origin resource sharing)

Application may grant access to services or data based on who is trying to get them. In such situations, when the origin of a request plays a crucial role, you may specify the origin in an Origin HTTP header. Please don’t confuse it with authentication; those use cases are similar and often come together. Still, they are different.

Example of sending the Origin header
  • Specifying user-agent

Client type – whether a mobile or web app, API, etc. – also influences the response you get. You can define the client type in your request and get the necessary response.

Example of sending the User-agent header
  • Adjusting cache control settings

Managing cache settings is a must in many situations, and HTTP headers may help you with that. You only need to include a Cache-control header in your request and specify its value. Responses will be cached according to the settings you defined.

Example of sending the Cache-Control header
  • Sending custom requests

Sometimes, apps you use require custom headers to process your request or perform actions you want. In this case, including such headers in your requests is necessary. Sometimes, such headers are required to protect against vulnerabilities and attacks. You should read the documentation before using an app to know what custom headers are available and necessary.

Example of sending the custom header
  • Sending conditional requests

You should use conditional headers if you need only certain data that match specific conditions. Those headers save time by getting only the required data and save bandwidth as you don’t waste GBs loading unnecessary information. If-Match or If-Modified-Since are examples of such headers. 

Example of sending the If-Match header

cURL: other features 

  • How to send multiple headers

Sometimes, you may need to send several headers regarding the same request. If this happens, you can list them all using the same cURL command. Remember to use an    H option each time you input a new key-value pair.

Example of sending multiple headers
  • How to check response headers

Seeing response headers from the target server is useful for troubleshooting and performance monitoring. They provide information about how long it took to process your request or whether there were any authentication issues. You can see them by using the -I or –head option. Both of them will show you headers only. 

Example of checking response headers

If you want to see both headers and content, use the -i or –include options.

Example of checking response headers and content
  • How to send empty headers

Some APIs require specific headers in the request, even if those headers don’t have any values. Sometimes, empty headers make the header act in a particular way. Developers also use them to see how a server reacts to such a situation and check that there are no loopholes waiting for hackers. To send such a header, provide its name followed by a semicolon without value.

Example of sending empty headers
  • How to remove a header

cURL adds some headers by default, such as the User-Agent header. If you don’t need it and want to remove it, type a header name followed by a colon, and don’t provide any value.

Example of removing a header
  • How to activate the verbose mode

This feature is used when you need to understand how the server proceeds with your request. When this mode is activated, cURL provides you with many details, including request and response details, HTTP method, version, status code, information on the connection process, and others. This mode is useful for debugging as it provides information about each step of the communication. You can activate it using the -v or –verbose option.

Activating the verbose mode
  • How to save headers

Debugging and performance monitoring often require saving headers to analyze them and keep records. So, you can save headers to a file and use them later. To do that:

  1. Use the -d or –dump-header options.
  2. If you need to save the content of the request as well, add -o or –output options.
  3. After commands, don’t forget to specify the file name where your computer should save headers.
Saving HTTP headers

Note: generally, HTTP headers are case-insensitive. However, sometimes APIs expect specific headers and will only work if you use capitalization. That’s why you need to carefully check documentation before sending headers.

Proxies for sending HTTP headers with cURL

When you scrape the web or conduct other activities that require sending numerous requests, you may face problems like request limits or geo-based blocks. In this case, proxies are your allies that help you get over limitations. For example, DataImpulse offers ethically sourced proxies that are easy to integrate and use with other tools, including cURL. This way, you can send as many requests as you need without stumbling upon restrictions.

To wrap up

Sometimes, you don’t need any special or expensive tools to get data. cURL is available for free and allows you to specify your requests so that you get information—all fast and without unnecessary details. To make the process even more effective, you can combine cURL with DataImpulse proxies. We offer 1-second response time proxies at a wallet-friendly pay-as-you-go pricing model. Click on the “Try now” button in the top-right corner of the screen or contact us at [email protected]

Jennifer R.

Content Editor

Content Manager at DataImpulse. Jennifer's degree in philology and translation and several years of experience in content writing help her create easy-to-understand copies, even on tangled tech topics. While writing every text, her goal is to provide an in-depth look at the given topic and give answers to all possible questions. Subscribe to our newsletter and always be updated on the best technologies for your business.