Python | Simple HTTP Server Construction
Simple HTTP server setup
HTTP protocol: HyperText Transfer Protocol
The role of the protocol is to transmit hypertext HTML (HyperTextMarkupLanguage)
HTML: Hypertext Markup Language
HTTP: A protocol for transferring hypertext
Taking Chrome as an example, right-click on the blank space of the web page and select Inspect to display the developer tools, including:
Elements show the structure of a web page
Network shows the communication between the browser and the server
Click Network, make sure the first little red light is on, and Chrome will log all communications between the browser and the server:
image.png
General contains some overview information. The detailed process of request headers and response headers in the request sending process is as follows:
image.png
import socket
# HTTP servers are all TCP-based socket connections
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('192.168.31.199', 9090))
server_socket.listen(128)
# The obtained data is a tuple with two elements in the tuple
# The 0th element is the client's socket link
# The first element is the ip address and port number of the client
client_socket, client_addr = server_socket.accept()
# Get data from the client's socket
data = client_socket.recv(1024).decode('utf8')
# return message to client
client_socket.send('hello world'.encode('utf8'))
print(data)
The result of accessing in the browser is as follows:
image.png
The browser returns a bad response, indicating that the response header needs to be set first
import socket
# HTTP servers are all TCP-based socket connections
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('192.168.31.199', 9090))
server_socket.listen(128)
# The obtained data is a tuple with two elements in the tuple
# The 0th element is the client's socket link
# The first element is the ip address and port number of the client
client_socket, client_addr = server_socket.accept()
# Get data from the client's socket
data = client_socket.recv(1024).decode('utf8')
print('Received data{}'.format(data))
# Before returning the content, you need to set the HTTP response header
# Set a response header and change a line
client_socket.send('HTTP/1.1 200 OK '.encode('utf8'))
client_socket.send('content-type:text/html '.encode('utf8'))
# After all the response headers are set, wrap the line
client_socket.send(' '.encode('utf8'))
# Send Content
client_socket.send('hello world'.encode('utf8'))
The result of accessing in the browser is as follows:
image.png
Change the address in the code to 0.0.0.0:
import socket
# HTTP servers are all TCP-based socket connections
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('0.0.0.0', 9090))
server_socket.listen(128)
# The obtained data is a tuple with two elements in the tuple
# The 0th element is the client's socket link
# The first element is the ip address and port number of the client
client_socket, client_addr = server_socket.accept()
# Get data from the client's socket
data = client_socket.recv(1024).decode('utf8')
print('Received {} data{}'.format(client_addr[0], data))
# Before returning the content, you need to set the HTTP response header
# Set a response header and change a line
client_socket.send('HTTP/1.1 200 OK '.encode('utf8'))
client_socket.send('content-type:text/html '.encode('utf8'))
# After all the response headers are set, wrap the line
client_socket.send(' '.encode('utf8'))
# Send Content
client_socket.send('hello world'.encode('utf8'))
Run this py file in the cloud server, and then access the corresponding port of the server's address in the browser. The access effect is as follows:
image.png
The access header and visitor address information will be printed out in the cloud server:
image.png
The code at this time can only receive a request once, you can add an infinite loop in the code, and change the port setting method to dynamic setting:
import socket
port = int(input('Please enter the port number:'))
# HTTP servers are all TCP-based socket connections
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('0.0.0.0', port))
server_socket.listen(128)
print('server is running at 0.0.0.0:{}'.format(port))
# The obtained data is a tuple with two elements in the tuple
# The 0th element is the client's socket link
# The first element is the ip address and port number of the client
while True:
client_socket, client_addr = server_socket.accept()
# Get data from the client's socket
data = client_socket.recv(1024).decode('utf8')
print('Received {} data{}'.format(client_addr[0], data))
# Before returning the content, you need to set the HTTP response header
# Set a response header and change a line
client_socket.send('HTTP/1.1 200 OK '.encode('utf8'))
client_socket.send('content-type:text/html '.encode('utf8'))
# After all the response headers are set, wrap the line
client_socket.send(' '.encode('utf8'))
# Send Content
client_socket.send('hello world'.encode('utf8'))
Start in the server and use port 8090:
image.png
Visit the result in the browser:
image.png
Adjust the returned content to the visitor's address:
import socket
port = int(input('Please enter the port number:'))
# HTTP servers are all TCP-based socket connections
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('0.0.0.0', port))
server_socket.listen(128)
print('server is running at 0.0.0.0:{}'.format(port))
# The obtained data is a tuple with two elements in the tuple
# The 0th element is the client's socket link
# The first element is the ip address and port number of the client
while True:
client_socket, client_addr = server_socket.accept()
# Get data from the client's socket
data = client_socket.recv(1024).decode('utf8')
print('Received {} data{}'.format(client_addr[0], data))
# Before returning the content, you need to set the HTTP response header
# Set a response header and change a line
client_socket.send('HTTP/1.1 200 OK '.encode('utf8'))
client_socket.send('content-type:text/html '.encode('utf8'))
# After all the response headers are set, wrap the line
client_socket.send(' '.encode('utf8'))
# Send Content
client_socket.send(client_addr[0].encode('utf8'))
Related Articles
-
A detailed explanation of Hadoop core architecture HDFS
Knowledge Base Team
-
What Does IOT Mean
Knowledge Base Team
-
6 Optional Technologies for Data Storage
Knowledge Base Team
-
What Is Blockchain Technology
Knowledge Base Team
Explore More Special Offers
-
Short Message Service(SMS) & Mail Service
50,000 email package starts as low as USD 1.99, 120 short messages start at only USD 1.00