Curl Command
:-
Transferring data from one place to another is one of the main
task done using computers connected to a network. There are so many GUI tools
out there to send and receive data, but when you are working on a console, only
equipped with command line functionality, using curl is inevitable. A less
known fact is that curl can work with a wide range of protocols and can solve
most of your scripting tasks with ease. Before getting into details of curl use
cases and examples, let's see who is behind its development.
What
is curl and what makes it a superb command line tool?
CURL is
simply awesome because of the following reasons...
1.
CURL
is an easy to use command line tool to send and receive files, and it supports
almost all major protocols(DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS,
IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP,
SMTP, SMTPS, TELNET and TFTP) in use.
2.
Can be
used inside your shell scripts with ease
3.
Supports
features like pause and resume of downloads
4.
It has
around 120 command line options for various tasks
5.
It
runs on all major operating systems(More than 40+ Operating systems)
6.
Supports
cookies, forms and SSL
7.
Both
curl command line tool and libcurl library are open source, so they can be used
in any of your programs
8.
It
supports configuration files
9.
Multiple
upload with a single command
10.
Progress
bar, rate limiting, and download time details
11.
ipv6
support.
1. Download a Single File
The following command will get the content of the URL and display it in the STDOUT (i.e on your terminal).
$ curl http://www.google.com
2.Fetch Multiple Files at a time
We can
download multiple files in a single shot by specifying the URLs on the command
line.
Syntax:
Syntax:
$ curl -O URL1 -O URL2
3.Follow HTTP Location Headers with -L option
By default CURL doesn’t follow the HTTP Location headers. It is also termed as Redirects. When a requested web page is moved to another place, then an HTTP Location header will be sent as a Response and it will have where the actual web page is located.For example, when someone types google.com in the browser from India, it will be automatically redirected to ‘google.co.in’. This is done based on the HTTP Location header as shown below.
$ curl http://www.google.com
<TITLE>302 Moved</TITLE>
<H1>302 Moved</H1>
The document has moved
<A HREF="http://www.google.co.in/">here</A>
The
above output says that the requested document is moved to
‘http://www.google.co.in/’.
We can
insists curl to follow the redirection using -L option, as shown below. Now it
will download the google.co.in’s html source code.
$ curl -L http://www.google.com
4. Continue/Resume a Previous Download
Using curl -C option, you can continue a download which was stopped already for some reason. This will be helpful when you download large files, and the download got interrupted.If we say ‘-C -’, then curl will find from where to start resuming the download. We can also give an offset ‘-C <offset>’. The given offset bytes will be skipped from the beginning for the source file.
Start a big download using curl, and press Ctrl-C to stop it in between the download.
$ curl -O http://www.gnu.org/software/gettext/manual/gettext.html
############## 20.1%
Note: -# is used to display a
progress bar instead of a progress meter.Now the above download was stopped at 20.1%. Using “curl -C -”, we can continue the download from where it left off earlier. Now the download continues from 20.1%.
curl -C - -O http://www.gnu.org/software/gettext/manual/gettext.html
############### 21.1%
5. Limit the Rate of Data Transfer
You
can ask curl to limit download speed to your desired value. This is very
helpful, when you do not want your curl command to consume much of the
available bandwidth. This can be done using the below method.
$
curl --limit-rate 100k -O http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.10.tar.gz
6. Download a file only if it is modified before/after the given time
We can get the files that are modified after a particular time using -z option in curl. This will work for both FTP & HTTP.$ curl -z 21-Dec-11 http://www.example.com/yy.html
The above command will download
the yy.html only if it is modified later than the given date and time$ curl -z -21-Dec-11 http://www.example.com/yy.html
The above command will download
the yy.html, if it is modified before than the given date and time.Please refer ‘man curl_getdate’ for the various syntax supported for the date expression
7. Pass HTTP Authentication in cURL
Sometime, websites will require a username and password to view the content ( can be done with .htaccess file ). With the help of -u option, we can pass those credentials from cURL to the web server as shown below.$ curl -u username:password URL
Note: By default curl uses Basic
HTTP Authentication. We can specify other authentication method using –ntlm |
–digest.8. Download Files from FTP server
cURL can also be used to download files from FTP servers. If the given FTP path is a directory, by default it will list the files under the specific directory.$ curl -u ftpuser:ftppass -O ftp://ftp_server/public_html/xss.php
The above command will download
the xss.php file from the ftp server and save it in the local directory.$ curl -u ftpuser:ftppass -O ftp://ftp_server/public_html/
Here, the given URL refers to a
directory. So cURL will list all the files and directories under the given URLIf you are new to FTP/sFTP, refer ftp sftp tutorial for beginners.
9. List/Download using Ranges
cURL supports ranges to be given in the URL. When a range is given, files matching within the range will be downloaded. It will be helpful to download packages from the FTP mirror sites.$ curl ftp://ftp.uk.debian.org/debian/pool/main/[a-z]/
The above command will list out
all the packages from a-z ranges in the terminal.10. Upload Files to FTP Server
Curl can also be used to upload files to the FTP server with -T option.$ curl -u ftpuser:ftppass -T myfile.txt ftp://ftp.testserver.com
The above command will upload the
file named myfile.txt to the FTP server. You can also upload multiple files at
a same time using the range operations.$ curl -u ftpuser:ftppass -T "{file1,file2}" ftp://ftp.testserver.com
Optionally we can use “.” to get
the input from STDIN and transfer to the remote.$ curl -u ftpuser:ftppass -T - ftp://ftp.testserver.com/myfile_1.txt
The above command will get the
input from the user from Standard Input and save the contents in the ftp server
under the name ‘myfile_1.txt’.You can provide one ‘-T’ for each URL and the pair specifies what to upload where.
11.Deleting files on FTP server
You can also delete files on your FTP server using curl command, as shown below.$ curl ftp://example.com/ -X 'DELE myfile.zip' --user username:password
11. More Information using Verbose and Trace Option
You can get to know what is happening using the -v option. -v option enable the verbose mode and it will print the detailscurl -v http://google.co.in
The about command will output the
following* About to connect() to www.google.co.in port 80 (#0)
* Trying 74.125.236.56... connected
* Connected to www.google.co.in (74.125.236.56) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.21.0 (i486-pc-linux-gnu) libcurl/7.21.0 OpenSSL/0.9.8o zlib/1.2.3.4 libidn/1.15 libssh2/1.2.6
> Host: www.google.co.in
> Accept: */*
>
* HTTP 1.0, assume close after body
< HTTP/1.0 200 OK
< Date: Tue, 10 Apr 2012 11:18:39 GMT
< Expires: -1
< Cache-Control: private, max-age=0
< Content-Type: text/html; charset=ISO-8859-1
< Set-Cookie: PREF=ID=7c497a6b15cc092d:FF=0:TM=1334056719:LM=1334056719:S=UORpBwxFmTRkbXLj; expires=Thu, 10-Apr-2014 11:18:39 GMT; path=/; domain=.google.co.in
.
.
If you need more detailed
information then you can use the –trace option. The trace option will enable a
full trace dump of all incoming/outgoing data to the given file12. Use Proxy to Download a File
We can specify cURL to use proxy to do the specific operation using -x option. We need to specify the host and port of the proxy.$ curl -x proxysever.test.com:3128 http://google.co.in
13. Send Mail using SMTP Protocol
cURL can also be used to send mail using the SMTP protocol. You should specify the from-address, to-address, and the mailserver ip-address as shown below.$ curl --mail-from blah@test.com --mail-rcpt foo@test.com smtp://mailserver.com
Once the above command is
entered, it will wait for the user to provide the data to mail. Once you’ve
composed your message, type . (period) as the last line, which will send the
email immediately.Subject: Testing
This is a test mail
OR
$curl --url "smtps://smtp.example.com:465" --ssl-reqd --mail-from "user@example.com" --mail-rcpt "friend@example.com" --upload-file mailcontent.txt --user "user@example.com:password" –insecure
In the
above command, replace smtps://smpt.example.com:465 with your SMTP server
and port.
--mail-from:
This field contains the from address that the receiver should see.
--mail-rcpt:
This field contains TO address
--upload-file:
The file provided here should contain your message as a content
--user:
SMTP user@domain:password
--insecure
option used is exactly same as using -k option we saw earlier, to ignore
unknown SSL certificates.
14.Using CURL to send HTTP POST, PUT, DELETE requests
Apart from the above seen examples, curl can be used to send different types of HTTP request methods to your server. This becomes very much handy if you want to configure an application using REST API. I will show you some example's of sending REST API requests using CURL.Sending POST request using CURL
If you use CURL to send request to a server without any request method option in the argument, it will by default use HTTP GET request. Which is a nice behavior. But using -X option in curl, you can send your required HTTP method to the server. Let's see POST request.$ curl -X POST -u admin:admin http://example.com/myconfigs/status -Hcontent-type:application/xml -d @/home/user/file.xml
Sending PUT request is exactly same as the above shown example of POST. Simply replace POST with PUT in the above example. If your web server does not accept these methods, you will get a 405 error as reply. HTTP 405 means that the server does not accept the HTTP method on that specific URL.
You can also get HTTP unsupported Media Type error as reply, if the server does not accept application/xml format. The HTTP status code for unsupported media type is 415.
15.Ignore SSL Certificate Error with CURL
$ curl -k https://10.1.136.101:4848
16.Modify User Agent In HTTP request
When a web browser sends an HTTP request, it includes its own details in the request. This detail allows the server to identify the browser details. The HTTP request header that includes this information is called as User-Agent. Basically server's can be configured to respond with different page layout for different user agent's. The user agent information send by the client will be visible in server logs.A normal HTTP request send by a Firefox web browser will have a user agent that looks something like "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.2.3)"
Using curl you can modify user agent value to your required string, as shown below.
$
curl -A "YOUR USER AGENT STRING GOES HEERE"
http://example.com17.Sending Cookies to Server using CURLCURL can be used to send requests to the server using a previously got cookie. You can either use VALUE=DATA format or give a file name as parameter, so that curl can use cookie data from the file as input. You can also save the cookies you get from the server to a file using -c option as shown below.$ curl -b
mycookies.txt http://example.com |
|||
No comments:
Post a Comment