python實現簡單的http伺服器
阿新 • • 發佈:2018-12-22
學習了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()