1. 程式人生 > >python實現簡單的http伺服器

python實現簡單的http伺服器

學習了http協議後,手動實現一個簡單的http伺服器,與瀏覽器通訊

需求

實現能夠與瀏覽器通訊的伺服器

涉及技術點

  • 掌握python程式設計基礎及多工
  • 掌握python socket網路通訊過程
  • 熟悉TCP/IP協議,清楚socket實現TCP伺服器實現過程
  • 熟悉HTTP協議

實現思路

  • 在實現tcp長連線伺服器的基礎上,以資料的傳送和接收為切入點,實現滿足http協議的伺服器。
  • 準備服務端http協議響應頭,響應行,響應體
  • 實現與瀏覽器的通訊

http_server_demo

"""
TCP伺服器端實現思路:
通過匯入python的socket模組,通過socket模組的socket函式實現作業系統socket介面的訪問
1.建立socket物件
2.bind IP地址和埠
3.設定監聽,確定最大排隊數量
4.等待連結
5.接收和傳送訊息
6.關閉套節字

"""
import socket
import multiprocessing

class Server_client():

    def __init__(self, host, port):
        # 建立套接字
        self.tcp_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.host = host
        self.port = port

        self.tcp_server.bind((self.host, self.port))
        self.tcp_server.listen(128)

    def deal_with_msg(self,client_server):
        recv_msg = client_server.recv(1024)
        # 得到瀏覽器的請求(請求頭,請求行,請求體)
        # HTTP /index.html HTTP/1.1
        # 要列印瀏覽器的請求資訊,必須先準備好伺服器的響應資料,保證瀏覽器正常訪問後,才能打印出請求資訊
        # 準備(響應頭+響應行,響應體)
        print(recv_msg.decode('utf-8'))
        response_header = "HTTP/1.1 200 OK\r\n"
        response_line = "\r\n"

        response_header += response_line
        response_body = "Welcome to the first HTTP server!"

        client_server.send(response_header.encode('utf-8'))
        client_server.send(response_body.encode('utf-8'))

    def run_server(self):
        while True:

            client_server, client_addr = self.tcp_server.accept()

            # self.deal_with_msg(client_server)
            process = multiprocessing.Process(target=self.deal_with_msg, args=(client_server,))
            process.start()

            client_server.close()

def main():
    host = socket.gethostname()
    # host="127.0.0.1"
    port = 9999
    tcp_server = Server_client(host,port)

    tcp_server.run_server()


    tcp_server.close()



if __name__ == '__main__':
    main()




技術點學習地址: