Telnet is an ancient application protocol for bidirectional clear-text communication. It was designed for interactive text-oriented communications and there is no encrypted or secure version of Telnet.
TELNET is not a perfect match for curl. The protocol is not done to handle plain uploads or downloads so the usual curl paradigms have had to be stretched somewhat to make curl deal with it appropriately.
curl sends received data to stdout and it reads input to send on stdin. The transfer is complete when the connection is dropped or when the user presses control-c.
Once upon the time, systems provided telnet access for login. Then you could connect to a server and login to it, much like how you would do it with SSH today. That practice have fortunately now mostly been moved into the museum cabinets due to the insecure nature of the protocol.
The default port number for telnet is 23.
The fact that TELNET is basically just a simple clear-text TCP connection to the target host and port makes it somewhat useful to debug other protocols and services at times.
Example, connect to your local HTTP server on port 80 and send a (broken) request to it by manually entering
GET /and press return twice:
Your web server will most probably return something like this back:
HTTP/1.1 400 Bad Request
Date: Tue, 07 Dec 2021 07:41:16 GMT
When curl sets up a TELNET connection to a server, you can ask it to pass on options. You do this with
-t), and there are three options available to use:
TTYPE=<term>sets the "terminal type" for the session to be
XDISPLOC=<X display>sets the X display location
NEW_ENV=<var,val>sets the environment variable
varto the value
valin the remote session
Login to your local machine's telnet server and tell it you use a vt100 terminal:
curl --telnet-option TTYPE=vt100 telnet://localhost
You need to manually enter your name and password when prompted.