【Python高階程式設計035 ● 靜態web伺服器 ● 靜態Web伺服器-返回指定頁面資料】
阿新 • • 發佈:2020-09-15
---------Python基礎程式設計---------
Author : AI菌
【內容講解】
開發自己的靜態Web伺服器步驟: 1、編寫一個TCP服務端程式; 2、獲取瀏覽器傳送的http請求報文資料; 3、讀取固定頁面資料,把頁面資料組裝成HTTP響應報文資料傳送給瀏覽器; 4、HTTP響應報文資料傳送完成以後,關閉服務於客戶端的套接字。
【程式碼演示】
""" 開發自己的靜態Web伺服器步驟: 1、編寫一個TCP服務端程式; 2、獲取瀏覽器傳送的http請求報文資料; 3、讀取固定頁面資料,把頁面資料組裝成HTTP響應報文資料傳送給瀏覽器; 4、HTTP響應報文資料傳送完成以後,關閉服務於客戶端的套接字。 """ import socket if __name__ == '__main__': # 建立tcp服務端套接字 tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 設定埠號複用, 程式退出埠立即釋放 tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True) # 繫結埠號 tcp_server_socket.bind(("", 8000)) # 設定監聽 tcp_server_socket.listen(128) # 迴圈響應客戶端請求 while True: # 等待接受客戶端的連線請求 new_socket, port = tcp_server_socket.accept() # 程式碼執行到此,說明連線建立成功 # 接收客戶端的資料,對二進位制資料進行解碼 recv_client_data = new_socket.recv(4096) recv_client_data.decode("utf-8") print("來自客戶端的資料:", recv_client_data) # 讀取檔案資料 # rb表示以二進位制的方式讀取檔案資料 # r的方式可以讀取字串,但對於圖片檔案不合適 # 這裡的file表示開啟檔案的物件 # with open()關閉檔案這不操作不用程式設計師來完成,系統幫我們完成 with open("static/index.html", "rb") as file: file_data = file.read() # 響應行 response_line = "HTTP/1.1 200 OK\r\n" # 響應頭 response_head = "server:DiamondDownload1.0\r\n" # 響應體 response_body = file_data # 拼接響應報文 response_data = (response_line + response_head + "\r\n").encode("utf-8") + response_body # 傳送資料 new_socket.send(response_data) # 關閉服務端與客戶端套接字 new_socket.close()
【執行結果】
服務端程式控制臺列印結果:
來自客戶端的資料: b'GET /index.html HTTP/1.1\r\nHost: 192.168.1.64:9000\r\nConnection: keep-alive\r\nCache-Control: max-age=0\r\nUpgrade-Insecure-Requests: 1\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9\r\nAccept-Encoding: gzip, deflate\r\nAccept-Language: zh-CN,zh;q=0.9\r\n\r\n' 來自客戶端的資料: b'GET /favicon.ico HTTP/1.1\r\nHost: 192.168.1.64:9000\r\nConnection: keep-alive\r\nPragma: no-cache\r\nCache-Control: no-cache\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36\r\nAccept: image/avif,image/webp,image/apng,image/*,*/*;q=0.8\r\nReferer: http://192.168.1.64:9000/index.html\r\nAccept-Encoding: gzip, deflate\r\nAccept-Language: zh-CN,zh;q=0.9\r\n\r\n'
瀏覽器訪問:
【往期精彩】
▷【Python基礎程式設計196 ● 讀取檔案的4種方式】
▷【Python基礎程式設計197 ● 讀取檔案的4種方式】
▷【Python基礎程式設計198 ● 讀取檔案的4種方式】
▷【Python基礎程式設計199 ● Python怎麼讀/寫很大的檔案】
▷【Python基礎程式設計200 ● 讀取檔案的4種方式】
▷【Python基礎程式設計201 ● 讀取檔案的4種方式】
▷【Python基礎程式設計202 ● 讀取檔案的4種方式】
▷【Python基礎程式設計203 ● 讀取檔案的4種方式】
【加群交流】