使用py實現乙個簡單的html伺服器

2021-10-25 17:56:08 字數 2859 閱讀 8859

# 乙個 web 伺服器,應 《計算機網路》 要求

import os

from socket import af_inet, sock_stream, socket

from typing import list, generator

import magic

server_name =

'computer_network'

server_port =

12000

defget_response

(req:

str)

-> generator[

bytes

,none

,none]:

iflen

(req)==0

:return

none

file_addr:

str= req.splitlines()[

0].split(

' ')[1

].replace(

'/',

'static\\'

) file_content:

bytes

=bytes()

not_found:

bool

=false

print

(, file_addr)

if file_addr ==

'static\\'

: file_addr =

'static\\index.html'

# 判斷檔案是否存在並讀入檔案

ifnot os.path.exists(file_addr)

: not_found =

true

else

:with

open

(file_addr,

'rb'

)as f:

file_content = f.read(

)# 構建響應頭

)# 獲取 http 版本

status_code:

str=

"404 not found"

if not_found else

"200 ok"

data_length =

len(file_content)

mime_type:

str=

''# 判斷檔案 mime 型別

if os.path.exists(file_addr)

: mime_type =

str(magic.from_file(file_addr, mime=

true))

# 格式化響應頭

("響應頭:"

, response_head)

# 分批傳送資料

all_data:

bytes

= response_head.encode(

"utf-8"

)+ file_content

i:int=

0 mcu =

1024

# tcp 鏈路 muc

while

(i <

len(file_content)):

data:

bytes

= all_data[i:

(i+mcu)

] i += mcu

yield data

# 按間距中的綠色按鈕以執行指令碼。

if __name__ ==

'__main__'

: server_socket = socket(af_inet, sock_stream)

server_socket.bind((''

, server_port)

) server_socket.listen(1)

print

("伺服器已經開始執行"

)# 開始監聽並獲取套接字

while

true

: connected_socket, addr = server_socket.accept(

) req = connected_socket.recv(

1024

).decode(

)print

('請求頭:'

, req)

print

('\n'

)print

("本次傳送資料的大小:"

, end=

" ")

for data in get_response(req)

:print

(len

(data)

, end=

' ')

connected_socket.send(data)

print

('\n'

) connected_socket.close(

)

py 實現乙個shell

我們要實現的乙個 shell 類似物 讀取命令輸入 cmd sys.stdin.readline 切分 命令 cmd tokens tokenize cmd 執行這個切分好的命令 status execute cmd tokens 魔法切割一行命令 deftokenize string return...

使用selenium實現乙個簡單的爬蟲

使用selenium爬蟲 前2頁商品指定內容。主要思想 請求url,從原始碼中獲取指定selector,進行爬取。import time from selenium import webdriver browser webdriver.chrome browser.set page load tim...

在乙個py指令碼中呼叫另外乙個py指令碼中的類或函式

1.兩個檔案在同一目錄,直接import即可 2.兩個檔案在不同目錄 在匯入檔案的時候,python只搜尋當前指令碼所在的目錄,載入 entry point 入口指令碼執行目錄和sys.path中包含的路徑例如包的安裝位址。所以如果要在當前指令碼引用其他檔案,除了將檔案放在和指令碼同一目錄下,還有以...