A Comprehensive Guide to Sending HTTP Requests Using Telnet

Nov 24, 2025 · Programming · 8 views · 7.8

Keywords: Telnet | HTTP Request | Network Protocol

Abstract: This article provides a detailed explanation of how to use the Telnet tool to manually send HTTP requests, covering core concepts such as establishing basic connections, sending GET requests, and parsing responses. Through step-by-step demonstrations of actual interactions with the StackOverflow server, it delves into the workings of the HTTP protocol, including the composition of request lines, request headers, status lines, response headers, and response bodies. The article also discusses the differences between HTTP/1.0 and HTTP/1.1, as well as how to handle the limitations of HTTPS connections, offering practical guidance for understanding low-level network communication.

Introduction

In web development and system administration, understanding the fundamental workings of the HTTP protocol is crucial. While modern development tools and libraries simplify HTTP communication, manually sending requests via raw tools like Telnet can reveal intricate protocol details. Based on high-scoring answers from the StackOverflow community and RFC standards, this article systematically explains how to use Telnet to send HTTP requests.

Telnet and HTTP Basics

Telnet is a network protocol used for bidirectional interactive text communication over a network. It relies on the TCP protocol and is commonly used for remote login, but it can also interact with other text-based protocols like HTTP. HTTP (Hypertext Transfer Protocol) is the core of web communication, following a client-server model with a request-response pattern.

In HTTP communication, a client (e.g., a browser or Telnet) sends a request to a server, which returns a response. Both requests and responses consist of a start-line, headers, and an optional body. Using Telnet, we can manually construct these components to simulate browser behavior.

Establishing a TCP Connection

First, a TCP connection must be established with the target server. Use the Telnet command to specify the server domain and port (default HTTP port is 80). For example, to connect to StackOverflow:

telnet stackoverflow.com 80

After execution, the terminal displays connection information:

Trying 151.101.65.69...
Connected to stackoverflow.com.
Escape character is '^]'.

This indicates a successful TCP connection. DNS resolution converts the domain name to an IP address (e.g., 151.101.65.69), and Telnet communicates with the server via port 80. The escape character '^]' allows the user to interrupt the session.

Sending an HTTP GET Request

Once connected, manually enter the HTTP request. To retrieve the StackOverflow questions page, send a GET request:

GET /questions HTTP/1.0
Host: stackoverflow.com

Key points:

In the Telnet session, after entering the above text and pressing enter twice (representing the empty line), the server returns a response. HTTP/1.0 defaults to closing the connection after the response, while HTTP/1.1 supports persistent connections (which can be explicitly closed with the Connection: close header).

Parsing the HTTP Response

Example server response:

HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
...
<!DOCTYPE html>
<html>
...
</html>

Response structure:

If using HTTP/1.1 without specifying Connection: close, the connection may remain open for subsequent requests. In Telnet, this appears as the session not terminating automatically.

Handling HTTPS Limitations

Raw Telnet does not support encrypted connections. For HTTPS URLs (e.g., https://stackoverflow.com/questions), Telnet cannot be used directly because HTTPS adds a TLS/SSL encryption layer on top of TCP. An alternative is to use the OpenSSL tool:

openssl s_client -connect stackoverflow.com:443

Then send the same HTTP request:

GET /questions HTTP/1.1
Host: stackoverflow.com

OpenSSL handles the TLS handshake, ensuring secure communication. The response format is identical to HTTP, but the content is transmitted over an encrypted channel.

Advanced Topics and Considerations

Beyond GET requests, other methods like POST can also be sent via Telnet. For example, a POST request with JSON data:

POST /post HTTP/1.1
Host: httpbin.org
Connection: close
Content-Type: application/json
Content-Length: 14

{"test":true}

Important notes:

Telnet's real-time nature demands precise input to avoid extra characters. In practice, file redirection or scripting can automate this process.

Conclusion

Sending HTTP requests via Telnet is an effective way to understand network protocols. This article has demonstrated the entire process from connection establishment to request sending and response parsing, emphasizing key components like the request line, Host header, and empty line. Although the tool has limitations, it can be extended to HTTPS with OpenSSL. Mastering these basics aids in debugging network issues, deepening knowledge of HTTP RFCs (e.g., 7230 and 7231), and enhancing overall development skills. Readers are encouraged to experiment with other request methods or header fields to further explore protocol details.

Copyright Notice: All rights in this article are reserved by the operators of DevGex. Reasonable sharing and citation are welcome; any reproduction, excerpting, or re-publication without prior permission is prohibited.