Every developer needs to know a bunch of tools to be effective. cURL in one such tool 😄 In this article I will explain how . curl can be used to make HTTP requests What is cURL cURL is basically used to transfer data using Internet Protocols for the given URL. Curl is a Client side program. In the name , stands for Client and indicates curl works with URL’s. cURL c URL The curl project has a curl command line and also a libcurl library. In this article we will be focussing on the curl command line. Curl deals with a bunch of Internet Protocols like HTTP, FTP, SMTP, TELNET and so on. In this article we will deal only with making HTTP requests from Curl. Pre-requisite You can check if you have Curl Installed in your System using the command. curl --version If Curl is not there in your system you can install it from this URL . https://curl.haxx.se/dlwiz/ How to Use Curl for HTTP Requests I have built 2 REST Endpoints using . One endpoint supports GET request and the other endpoint supports POST request. API NodeJS In this article, we will be calling the GET and POST endpoints using Curl. Please clone the NodeJS code into your local from this github repo The repo has instructions on how to clone and run the NodeJS code. After cloning the code, go into the project folder and start the application using the following command. node server.js The application runs on localhost port 3000. GET Request with cURL The application has a GET endpoint . This endpoint accepts a query parameter called . /sample name Let’s call this API endpoint using curl. Go to a new command prompt and type the following command curl http://localhost:3000/sample?name=aditya This will give the following output {"text":"Hello aditya"} You can also get a verbose result using Curl. Run the following command curl -v http://localhost:3000/sample?name=aditya is used to get verbose output. -v This will give the following output. * Trying ::1...* TCP_NODELAY set* Trying 127.0.0.1...* TCP_NODELAY set* Connected to localhost (127.0.0.1) port 3000 (#0)> GET /sample?name=aditya HTTP/1.1> Host: localhost:3000> User-Agent: curl/7.55.1> Accept: */*>< HTTP/1.1 200 OK< Content-Type: application/json< Date: Thu, 15 Nov 2018 12:36:21 GMT< Connection: keep-alive< Content-Length: 23<{"text":"Hello aditya"}* Connection #0 to host localhost left intact The verbose result has details like status code, Content Type, Content Length and so on. It can be used to get a better idea of what happened during the HTTP request. The status code is 200 which indicates the HTTP request was successful. The Content-type of the response is JSON. The Content-Length indicates the size of the response. Here the response size is 23 bytes. POST request with cURL The application has a POST endpoint . This endpoint accepts a post body of the following format. /test { "value":"nodejs"} In order to make the POST call, type the following command. curl --header "Content-Type: application/json" -d "{\"value\":\"node JS\"}" http://localhost:3000/test indicates the content type of the post body. Here it is JSON. –header is used to send the post body content. -d The output of this command is shown below. {"text":"Post Request Value is node JS"} To get Verbose result use the following command curl -v --header "Content-Type: application/json" -d "{\"value\":\"node JS\"}" http://localhost:3000/test The output is shown below. * Trying ::1...* TCP_NODELAY set* Trying 127.0.0.1...* TCP_NODELAY set* Connected to localhost (127.0.0.1) port 3000 (#0)> POST /test HTTP/1.1> Host: localhost:3000> User-Agent: curl/7.55.1> Accept: */*> Content-Type: application/json> Content-Length: 19>* upload completely sent off: 19 out of 19 bytes< HTTP/1.1 200 OK< Content-Type: application/json< Date: Thu, 15 Nov 2018 13:03:37 GMT< Connection: keep-alive< Content-Length: 41 Additional Options provided by command line The existing headers can be modified using option. -H Run the following Command to modify the header to User-Agent Dummy Agent curl -v -H "User-Agent:Dummy Agent" http://localhost:3000/sample?name=adi The output for the above command is shown below * Trying ::1...* TCP_NODELAY set* Trying 127.0.0.1...* TCP_NODELAY set* Connected to localhost (127.0.0.1) port 3000 (#0)> GET /sample?name=adi HTTP/1.1> Host: localhost:3000> Accept: */*> User-Agent:Dummy Agent>< HTTP/1.1 200 OK< Content-Type: application/json< Date: Thu, 15 Nov 2018 13:33:27 GMT< Connection: keep-alive< Content-Length: 20<{"text":"Hello adi"}* Connection #0 to host localhost left intact In the above output it can be seen that has become . User-Agent Dummy Agent Now Let’s say you want to remove the Header. This can be done by running the following command. Host curl -v -H "Host:" http://localhost:3000/sample?name=adi The output for the above command is given below and it can be seen that is not there anymore Host * Trying ::1...* TCP_NODELAY set* connect to ::1 port 3000 failed: Connection refused* Trying 127.0.0.1...* TCP_NODELAY set* Connected to localhost (127.0.0.1) port 3000 (#0)> GET /sample?name=adi HTTP/1.1> User-Agent: curl/7.55.1> Accept: */*>< HTTP/1.1 200 OK< Content-Type: application/json< Date: Thu, 15 Nov 2018 13:38:37 GMT< Connection: keep-alive< Content-Length: 20<{"text":"Hello adi"}* Connection #0 to host localhost left intact can be used to add new headers as well. This can be done using the syntax -H curl -v -H "newheader: headervalue" References cURL’s Documenation: https://ec.haxx.se/ More Info on Using Curl for HTTP requests https://ec.haxx.se/http.html Congrats 😄 You now know how to use cURL for basic HTTP requests. This article covers a very small portion of what curl can actually do. To know more about curl you can check the documentation links I have provided above. About the author I love technology and follow the advancements in the field. Feel free to connect with me on my LinkedIn account https://www.linkedin.com/in/aditya1811/ You can also follow me on twitter https://twitter.com/adityasridhar18 My Website: https://adityasridhar.com/ Originally published at adityasridhar.com .