Python 開發web伺服器,返回HTML頁面

2021-09-28 08:32:29 字數 1985 閱讀 9647

python 開發web靜態伺服器 - 返回固定值:胖子老闆,來包檳榔

從上乙個篇章的內容中已經完成了使用tcp協議返回http的請求,達到乙個返回資料到訪問瀏覽器的效果。

那麼本次篇章的需求:

就是返回乙個html檔案到瀏覽器。

那麼該怎麼去開發這個功能呢?

那麼還有乙個問題,就是訪問瀏覽器的時候的url路徑,如何去解析訪問哪個html檔案呢?

簡單來說,就可以使用服務端接受到的url位址,使用正規表示式來解析最後的路徑,再根據路徑來判斷訪問哪個html檔案。

好了,思路已有,下面就是一步步去實現。

"""為乙個客戶端服務"""

# 接收對方傳送的資料

recv_data = client_socket.recv(1024).decode("utf-8") # 1024表示本次接收的最大位元組數

# 列印從客戶端傳送過來的資料內容

#print("client_recv:",recv_data)

request_header_lines = recv_data.splitlines()

for line in request_header_lines:

print(line)

# 返回瀏覽器資料

# 設定返回的頭資訊 header

response_headers = "http/1.1 200 ok\r\n" # 200 表示找到這個資源

response_headers += "\r\n" # 空一行與body隔開

# 設定內容body

response_body = ""

response = response_headers + response_body

client_socket.send(response.encode("utf-8"))

client_socket.close()

def main():

# 建立套接字

server_socket = socket(af_inet, sock_stream)

# 設定當伺服器先close 即伺服器端4次揮手之後資源能夠立即釋放,這樣就保證了,下次執行程式時 可以立即繫結7788埠

server_socket.setsockopt(sol_socket, so_reuseaddr, 1)

# 設定服務端提供服務的埠號

server_socket.bind(('', 7788))

# 使用socket建立的套接字預設的屬性是主動的,使用listen將其改為被動,用來監聽連線

server_socket.listen(128) #最多可以監聽128個連線

# 開啟while迴圈處理訪問過來的請求

while true:

# 如果有新的客戶端來鏈結服務端,那麼就產生乙個新的套接字專門為這個客戶端服務

# client_socket用來為這個客戶端服務

# server_socket就可以省下來專門等待其他新的客戶端連線while true:

python 簡易WEB伺服器

設計乙個web服務,滿足以下基本功能 建立套接字 使用埠號 6699 獲取http請求,並解析http請求報文 顯示請求報文各字段的欄位名和值,對部分字段進行說明 根據http請求報文獲得物件檔案路徑名 根據路徑名開啟本地檔案 封裝本地檔案到http響應報文 使用套接字傳送http相應報文 瀏覽器輸...

web伺服器 簡單web伺服器實現

三次握手 一般情況下是瀏覽器先傳送請求資料,c s ack 應答 三次握手成功後,才開始進行通訊資料的收發。四次揮手 一般情況下是客戶端先關閉,給瀏覽器傳送關閉資訊。如果瀏覽器傳送了關閉資訊,但是伺服器沒有回過去,較慢 那麼瀏覽器一直發是不是就會有問題?所以會等待 2msl的時間。一般為2 5分鐘。...

web伺服器 併發web伺服器實現 epoll

在linux的網路程式設計中,很長的時間都在使用select來做事件觸發。在linux新的核心中,有了一種替換它的機制,就是epoll。epoll 是當今 linux 系統採用的方式,一般伺服器都是用 epoll 來實現的。epoll 是一種方案,這種方案不使用多程序多執行緒多協程,而是使用單程序單...