python程序15:用python写一个web服务

web服务器为机器上监听了本地的IP和端口的一个进程,当有客户的请求进来时,它会响应客户的请求并返回相应的信息。客户端和服务端之间的通信基于HTTP协议,客户端可以是浏览器或者任何支持HTTP的应用。

用户在浏览器输入网址向web服务器发出一个请求,web服务器收到请求后返回Hello, world!给浏览器,用户就能在浏览器上看到文字。现在用Python实现这样一个简单的web服务器。代码如下:

# 导入 socket 模块
import socket

# 定义主机和端口号
HOST, PORT = '', 8888

# 创建一个 socket 对象,使用 IPv4 和 TCP 协议
listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 设置 socket 选项,允许地址重用
listen_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

# 绑定主机和端口号
listen_socket.bind((HOST, PORT))

# 开始监听连接,最多只能处理一个连接
listen_socket.listen(1)

# 输出服务器启动信息
print('Serving HTTP on port %s ...' % PORT)

# 进入无限循环,等待客户端连接
while True:
    # 接受客户端连接请求,返回一个新的 socket 对象和客户端地址
    client_connection, client_address = listen_socket.accept()

    # 接收客户端发送的请求数据,最大接收数据量为 1024 字节
    request = client_connection.recv(1024)

    # 将请求数据解码成字符串,并输出到控制台
    print(request.decode("utf-8"))

    # 构造 HTTP 响应报文
    http_response = """\
HTTP/1.1 200 OK

Hello, World!
"""

    # 将响应报文编码成二进制数据,并发送给客户端
    client_connection.sendall(http_response.encode("utf-8"))

    # 关闭连接
    client_connection.close()

监听本地的8888端口,收到客户端的请求后,在控制台打印出请求的头部和内容,并返回响应的头部和内容给客户端。

运行上面的代码会出现:http://localhost:8888/,这里的localhost等同于127.0.0.1,

下一步我们直接打开浏览器输入:

这时候控制台会提示下图信息:

这就是客户端请求的头部信息。

HTTP协议是TCP协议上层的协议,因此在实现HTTP交互之前,客户端和服务端先要创建TCP连接。创建TCP连接就要用到socket模块。创建TCP连接由客户端发起,为接受客户端的TCP连接请求,服务器端需要经历以下几步:

  • 创建socket
  • 调用bind绑定到指定的IP和端口
  • 调用listen监听端口
  • 调用accept接受客户端的请求

至此一个TCP连接创建完成,接下来就可以进行数据的收发。

好了,以上就是一个最简单的web服务器。

发表回复