import socketimport re
import os
def handle_client(socket_con):
"""接收來自客戶端的請求,並接收請求報文,解析,返回
"""# 1、伺服器接收客戶端的請求報文
request = socket_con.recv(4096).decode()
# 以行切割請求報文為列表
res = request.split('\r\n')
# 取第一位(請求行):get / http/1.1,並用正則切割get / http/1.1,取出路徑位置
path = re.match('\w+\s(\s+)',res[0])
path = path.group(1)
# 判斷路徑長度,大於一則拼接出路徑,小於等於一則顯示首頁
if len(path) > 1:
# 路徑取出,開始拼接資源路徑(絕對路徑自己填寫)
path = '# 資料夾絕對路徑' + path
print(path)
else:
# 顯示首頁**
歡迎來到首頁
感謝你的使用
''' response = response_line + response_head + '\r\n' + response_body
socket_con.send(response.encode())
socket_con.close()
# 路徑大於一併取出之後判斷資源是否存在
if not os.path.exists(path):
# 資源不存在則顯示資源不存在介面
如果你想訪問乙個資源,請輸入正確的資源路徑
感謝你的使用
''' response = response_line + response_head + '\r\n' + response_body
socket_con.send(response.encode())
socket_con.close()
return
else:
# 資源存在以後判斷是否是檔案,是檔案則直接讀取
# 如果是資料夾
# 判斷資料夾下是否有預設檔案,如果有則返回,如果沒有則判斷伺服器是否開啟了目錄瀏覽
# 預設檔案:index.html default.html
# 是否可以訪問預設檔案開關,true 開 ,false 關
default_document = false
if default_document:
# 判斷使用者訪問的資料夾下是否有index.html 或者 default.html
# 如果沒有上述兩個頁面,則可以返回404錯誤,或者302重定向
# 不能訪問預設檔案情況下,判斷伺服器是否開啟了目錄瀏覽
else:
dir_browsing = true
if dir_browsing:
# 把使用者請求的資料夾中所有的檔案和資料夾以目錄的形式返回到頁面中
# 獲取使用者請求的資料夾
# 動態的拼接頁面,將目錄中的檔案或者資料夾的名稱以html頁面的方式返回給瀏覽器
response_body = ''
response = response_line + response_head + "\r\n" + response_body
socket_con.send(response.encode())
socket_con.close()
return
else:
# 使用者請求的路徑沒有斜線
# 重定向到+斜線的目錄下,並顯示重定向以後的路徑(此處可以增加有斜線目錄處理方式也就是上面的方法)
response_body = '重定向' + path + '/'
response = response_line + response_head + '\r\n' + response_body
socket_con.send(response.encode())
socket_con.close()
def main():
# 1、伺服器建立負責監聽的socket
socket_watch = socket.socket(socket.af_inet,socket.sock_stream)
# 2、設定位址重用
socket_watch.setsockopt(socket.sol_socket, socket.so_reuseaddr, 1)
# 3、繫結監聽的埠
socket_watch.bind(("",8888))
# 4、設定監聽佇列
socket_watch.listen(128)
# 5、通過迴圈,不停的接收來自客戶端的連線請求
while true:
socket_con,con_adds = socket_watch.accept()
# 注意將con_adds轉成字串
print("客戶端:%s連線成功!!!" % str(con_adds))
# 接收來自客戶端的請求,並接收請求報文,解析,返回
handle_client(socket_con)
if __name__ == '__main__':
main()
返回固定頁面的web伺服器
import socket def handle client socket con 接收來自客戶端的請求,並接收請求報文,解析,返回 伺服器接收客戶端的請求報文 request socket con.recv 4096 decode print request 伺服器拼接響應報文並回覆 respo...
HTTP伺服器返回web瀏覽器指定檔案版
從瀏覽器解析資源路徑 獲取請求行 head list re.split r r n request print head list request line head list 0 獲取請求資源路徑 datas re.split r request line print datas 對路徑的安全檢查...
web伺服器開發日記 CGI實現頁面的動態生成
傳統的web應用開發侷限於有限的靜態頁面,不利於系統擴充套件,因此建立乙個動態web應用程式尤為重要。一方面根據訪問者的不同請求返回不同的訪問資訊,即滿足服務的多樣性 另一方面,可以直接通過後台管理頁面發布和修改資訊即可,再也不需要修改頁面程式。一種簡單的建立動態頁面的方法和技術 cgi commo...