How To Use Curl
The curl guide to HTTP requests – Flavio Copes
curl is a a command line tool that allows to transfer data across the network.
It supports lots of protocols out of the box, including HTTP, HTTPS, FTP, FTPS, SFTP, IMAP, SMTP, POP3, and many more.
When it comes to debugging network requests, curl is one of the best tools you can find.
It’s one of those tools that once you know how to use you always get back to. A programmer’s best friend.
It’s universal, it runs on Linux, Mac, Windows. Refer to the official installation guide to install it on your system.
Fun fact: the author and maintainer of curl, swedish, was awarded by the king of Sweden for the contributions that his work (curl and libcurl) did to the computing world.
Let’s dive into some of the commands and operations that you are most likely to want to perform when working with HTTP requests.
Those examples involve working with HTTP, the most popular protocol.
Perform an HTTP GET request
Get the HTTP response headers
Only get the HTTP response headers
Perform an HTTP POST request
Perform an HTTP POST request sending JSON
Perform an HTTP PUT request
Follow a redirect
Store the response to a file
Using HTTP authentication
Set a different User Agent
Inspecting all the details of the request and the response
Copying any browser network request to a curl command
When you perform a request, curl will return the body of the response:
curl Get the HTTP response headers
By default the response headers are hidden in the output of curl. To show them, use the i option:
curl -i Only get the HTTP response headers
Using the I option, you can get only the headers, and not the response body:
curl -I Perform an HTTP POST request
The X option lets you change the HTTP method used. By default, GET is used, and it’s the same as writing
curl -X GET Using -X POST will perform a POST request.
You can perform a POST request passing data URL encoded:
curl -d “option=value&something=anothervalue” -X POST In this case, the application/x-www-form-urlencoded Content-Type is sent.
Instead of posting data URL-encoded, like in the example above, you might want to send JSON.
In this case you need to explicitly set the Content-Type header, by using the H option:
curl -d ‘{“option”: “value”, “something”: “anothervalue”}’ -H “Content-Type: application/json” -X POST You can also send a JSON file from your disk:
curl -d “” -X POST Perform an HTTP PUT request
The concept is the same as for POST requests, just change the HTTP method using -X PUT
A redirect response like 301, which specifies the Location response header, can be automatically followed by specifying the L option:
curl will not follow automatically to the HTTPS version which I set up to redirect to, but this will:
curl -L Store the response to a file
Using the o option you can tell curl to save the response to a file:
curl -o You can also just save a file by its name on the server, using the O option:
curl -O Using HTTP authentication
If a resource requires Basic HTTP Authentication, you can use the u option to pass the user:password values:
curl -u user:pass Set a different User Agent
The user agent tells the server which client is performing the request. By default curl sends the curl/
You can specify a different user agent using the –user-agent option:
curl –user-agent “my-user-agent” Inspecting all the details of the request and the response
Use the –verbose option to make curl output all the details of the request, and the response:
curl –verbose -I Trying 178. 128. 202. 129…
* TCP_NODELAY set
* Connected to (178. 129) port 443 (#0)
* TLS 1. 2 connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
* Server certificate:
* Server certificate: Let’s Encrypt Authority X3
* Server certificate: DST Root CA X3
> HEAD / HTTP/1. 1
> Host:
> User-Agent: curl/7. 0
> Accept: */*
>
< HTTP/1. 1 200 OK
HTTP/1. 1 200 OK
< Cache-Control: public, max-age=0, must-revalidate
Cache-Control: public, max-age=0, must-revalidate
< Content-Type: text/html; charset=UTF-8
Content-Type: text/html; charset=UTF-8
< Date: Mon, 30 Jul 2018 08:08:41 GMT
Date: Mon, 30 Jul 2018 08:08:41 GMT...
When inspecting any network request using the Chrome Developer Tools, you have the option to copy that request to a curl request:
curl '' -H 'Connection: keep-alive' -H 'Pragma: no-cache' -H 'Cache-Control: no-cache' -H 'Upgrade-Insecure-Requests: 1' -H 'DNT: 1' -H 'User-Agent: Mozilla/5. 0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537. 36 (KHTML, like Gecko) Chrome/67. 0. 3396. 99 Safari/537. 36' -H 'Accept: text/html, application/xhtml+xml, application/xml;q=0. 9, image/webp, image/apng, */*;q=0. 8' -H 'Referer: ' -H 'Accept-Encoding: gzip, deflate, br' -H 'Accept-Language: en-US, en;q=0. 9, it;q=0. 8' -H 'Cookie: _octo=GH1. 1. 933116459. 1507545550; _ga=GA1. 2. 643383860. 1507545550; tz=Europe%2FRome; user_session=XXXXX; __Host-user_session_same_site=YYYYYY; dotcom_user=flaviocopes; logged_in=yes; has_recent_activity=1; _gh_sess=ZZZZZZ' --compressed
Installing Curl – Linuxize
curl is a command-line utility for transferring data from or to a server designed to work without user interaction. With curl, you can download or upload data using one of the supported protocols including HTTP, HTTPS, SCP, SFTP, and FTP. curl provides a number of options allowing you to resume transfers, limit the bandwidth, proxy support, user authentication, and much this tutorial, we will show you how to use the curl tool through practical examples and detailed explanations of the most common curl stalling Curl The curl package is pre-installed on most Linux distributions check whether the Curl package is installed on your system, open up your console, type curl, and press enter. If you have curl installed, the system will print curl: try ‘curl –help’ or ‘curl –manual’ for more information. Otherwise, you will see something like curl command not curl is not installed you can easily install it using the package manager of your stall Curl on Ubuntu and Debian sudo apt updatesudo apt install curlInstall Curl on CentOS and Fedora sudo yum install curlHow to Use Curl The syntax for the curl command is as follows:In its simplest form, when invoked without any option, curl displays the specified resource to the standard example, to retrieve the homepage you would run:curl command will print the source code of the homepage in your terminal no protocol is specified, curl tries to guess the protocol you want to use, and it will default to the Output to a File To save the result of the curl command, use either the -o or -O option. Lowercase -o saves the file with a predefined filename, which in the example below is -o -O saves the file with its original filename:curl -O Multiple files To download multiple files at once, use multiple -O options, followed by the URL to the file you want to the following example we are downloading the Arch Linux and Debian iso files:curl -O \ -O a Download You can resume a download by using the -C – option. This is useful if your connection drops during the download of a large file, and instead of starting the download from scratch, you can continue the previous example, if you are downloading the Ubuntu 18. 04 iso file using the following command:curl -O suddenly your connection drops you can resume the download with:curl -C – -O headers are colon-separated key-value pairs containing information such as user agent, content type, and encoding. Headers are passed between the client and the server with the request or the the -I option to fetch only the HTTP headers of the specified resource:curl -I –2 if a Website Supports HTTP/2 To check whether a particular URL supports the new HTTP/2 protocol, fetch the HTTP Headers with -I along with the –2 option:curl -I –2 -s | grep HTTPThe -s option tells curl to run in a silent (quiet) and hide the progress meter and error the remote server supports HTTP/2, curl prints HTTP/2. 0 200:HTTP/2 200
Otherwise, the response is HTTP/1. 1 200:HTTP/1. 1 200 OK
If you have curl version 7. 47. 0 or newer, you do not need to use the –2 option because HTTP/2 is enabled by default for all HTTPS Redirects By default, curl doesn’t follow the HTTP Location you try to retrieve the non-www version of, you will notice that instead of getting the source of the page you’ll be redirected to the www version:curl -L option instructs curl to follow any redirect until it reaches the final destination:curl -L mChange the User-Agent Sometimes when downloading a file, the remote server may be set to block the Curl User-Agent or to return different contents depending on the visitor device and situations like this to emulate a different browser, use the -A example to emulates Firefox 60 you would use:curl -A “Mozilla/5. 0 (X11; Linux x86_64; rv:60. 0) Gecko/20100101 Firefox/60. 0” a Maximum Transfer Rate The –limit-rate option allows you to limit the data transfer rate. The value can be expressed in bytes, kilobytes with the k suffix, megabytes with the m suffix, and gigabytes with the g the following example curl will download the Go binary and limit the download speed to 1 mb:curl –limit-rate 1m -O option is useful to prevent curl consuming all the available ansfer Files via FTP To access a protected FTP server with curl, use the -u option and specify the username and password as shown below:curl -u FTP_USERNAME:FTP_PASSWORD logged in, the command lists all files and directories in the user’s home can download a single file from the FTP server using the following syntax:curl -u FTP_USERNAME:FTP_PASSWORD upload a file to the FTP server, use the -T followed by the name of the file you want to upload:curl -T -u FTP_USERNAME:FTP_PASSWORD Cookies Sometimes you may need to make an HTTP request with specific cookies to access a remote resource or to debug an default, when requesting a resource with curl, no cookies are sent or send cookies to the server, use the -b switch followed by a filename containing the cookies or a example, to download the Oracle Java JDK rpm file
you’ll need to pass a cookie named oraclelicense with value a:curl -L -b “oraclelicense=a” -O Proxies curl supports different types of proxies, including HTTP, HTTPS and SOCKS. To transfer data through a proxy server, use the -x (–proxy) option, followed by the proxy following command downloads the specified resource using a proxy on 192. 168. 44. 1 port 8888:curl -x 192. 1:8888 the proxy server requires authentication, use the -U (–proxy-user) option followed by the user name and password separated by a colon (user:password):curl -U username:password -x 192. 1:8888 curl is a command-line tool that allows you to transfer data from or to a remote host. It is useful for troubleshooting issues, downloading files, and examples shown in this tutorial are simple, but demonstrate the most used curl options and are meant to help you understand how the curl command more information about curl visit the Curl Documentation
you have any questions or feedback, feel free to leave a comment.
cURL: What It Is, And How You Can Use It For Web Scraping
cURL is a versatile command used by programmers for data collection and data transfers. But how can you leverage cURL for web scraping? This article will help you get started.
23-Dec-2020
In this blog post you will learn:
What is cURL?
How to use cURL?
Why is cURL so popular?
Web scraping with cURL
What Is cURL?
cURL is a command-line tool that you can use to transfer data via network protocols. The name cURL stands for ‘Client URL’, and is also written as ‘curl’. This popular command uses URL syntax to transfer data to and from servers. Curl is powered by ‘libcurl’, a free and easy-to-use client-side URL transfer library.
Why using curl is advantageous?
The versatility of this command means you can use curl for a variety of use cases, including:
User authentication
HTTP posts
SSL connections
Proxy support
FTP uploads
The simplest ‘use case’ for curl would be downloading and uploading entire websites using one of the supported protocols.
Curl protocols
While curl has a long list of supported protocols it will use HTTP by default if you don’t provide a specific protocol. Here is the list of supported protocols:
Image source: Bright Data
Installing curl
The curl command is installed by default in Linux distributions.
How do you check if you already have curl installed?
1. Open your Linux console
2. Type ‘curl’, and press ‘enter’.
3. If you already have curl installed, you will see the following message:
4. If you don’t have curl installed already, you will see the following message: ‘command not found’. You can then turn to your distribution package and install it (more details below).
How to use cURL
Curl’s syntax is pretty simple:
Curl [options] [url]Image source: Bright Data
For example, if you want to download a webpage: just run:
curl source: Bright Data
The command will then give you the source code of the page in your terminal window. Keep in mind that if you don’t specify a protocol, curl will default to HTTP. Below you can find an example of how to define specific protocols:
Curl source: Bright Data
If you forget to add the curl will guess the protocol you want to use.
We talked briefly about the basic use of the command, but you can find a list of options on the curl documentation site. The options are the possible actions you can perform on the URL. When you choose an option, it tells curl what action to take on the URL you listed. The URL tells curl where it needs to perform this action. Then curl lets you list one or several URLs.
To download multiple URLs, prefix each URL with a -0 followed by a space. You can do this in a single line or write a different line for each URL. You can also download part of a URL by listing the pages. For example:
curl example. (page1, page4, page6). htmlImage source: Bright Data
Saving the download
You can save the content of the URL to a file by using curl using two different methods:
1. -o method: Allows you to add a filename where the URL will be saved. This option has the following structure:
curl -o source: Bright Data
2. -O method: Here you don’t need to add a filename, since this option allows you to save the file under the URL name. To use this option, you just need to prefix the URL with a -O.
Resuming the download
It may happen that your download stops in the middle. In this case scenario, rewrite the command adding the -C option at the beginning:
Curl -C -O source: Bright Data
Why is curl so popular?
Curl is really the ‘swiss-knife’ of commands, created for complex operations. However, there are alternatives, for example, ‘wget’ or ‘Kurly’, that are good for simpler tasks.
Curl is a favorite among developers because it is available for almost every platform. Sometimes it is even installed by default. This means, whatever programs/jobs you are running, curl commands should work.
Also, chances are that if your OS is less than a decade old, you will have curl installed. You can also read the docs in a browser, and check the curl documentation. If you are running a recent version of Windows, you probably already have curl installed. If you don’t, check out this post on Stack Overflow to learn more about how to do this.
Web Scraping with cURL
Pro tip: Be sure to abide by a website’s rules, and in general do not try to access password-protected content which is illegal for the most part or at the very least frowned upon.
You can use curl to automate the repetitive process when web scraping, helping you avoid tedious tasks. For that, you will need to use PHP. Here’s an example we found on GitHub:
When you use curl to scrape a webpage there are three options, you should use:
curl_init($url) -> Initializes the session
curl_exec() -> Executes
curl_close() -> Closes
Other options you should use include:
Curlopt_url -> Sets the URL you want to scrape
Curlopt_returntransfer -> Tells curl to save the scraped page as a variable. (This enables you to get exactly what you wanted to extract from the page. )
What’s next?
In this post, we explained what curl is and what you can do with some basic commands. We also showed you an example of how you can use curl to scrape web pages. Start taking advantage of this versatile tool to start collecting your target data.
Tired of complex and timely web scraping techniques?
Gal El Al | Head of Support Head of Support at Bright Data with a demonstrated history of working in the computer and network security industry. Specializing in billing processes, technical support, quality assurance, account management, as well as helping customers streamline their data collection efforts while simultaneously improving cost efficiency.
This website uses cookies to improve the user experience. To learn more about our cookie policy or withdraw from it, please check our Privacy Policy and Cookie PolicyAgree
Frequently Asked Questions about how to use curl
What is curl and how do you use it?
cURL is a command-line tool that you can use to transfer data via network protocols. The name cURL stands for ‘Client URL’, and is also written as ‘curl’. This popular command uses URL syntax to transfer data to and from servers. Curl is powered by ‘libcurl’, a free and easy-to-use client-side URL transfer library.Dec 23, 2020
What is the use of curl command?
cURL, which stands for client URL, is a command line tool that developers use to transfer data to and from a server. At the most fundamental, cURL lets you talk to a server by specifying the location (in the form of a URL) and the data you want to send.Feb 23, 2021
How do I use curl terminal?
To make a GET request using Curl, run the curl command followed by the target URL. Curl automatically selects the HTTP GET request method unless you use the -X, –request, or -d command-line option. In this Curl GET example, we send Curl requests to the ReqBin echo URL.Sep 9, 2021