日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python自带静态web服务器搭建代码实现(一)

發(fā)布時間:2023/12/14 python 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python自带静态web服务器搭建代码实现(一) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、靜態(tài)web服務器

靜態(tài)web法服務器:可為發(fā)出請求的瀏覽器提供靜態(tài)文檔的程序,平時上網(wǎng)瀏覽的頁面都是動態(tài)的,而開發(fā)的是靜態(tài)的,頁面數(shù)據(jù)不會發(fā)生變化

搭建python自帶的靜態(tài)web服務器

  • 命令:python3 -m http.server 端口號
    • -m:表示運行包里面的模塊,執(zhí)行該命令需進入指定靜態(tài)文件目錄,通過瀏覽器就能訪問對應html文件
    • 端口號若不指定則默認為8000

  • 訪問:http://127.0.0.1:9000/

瀏覽器訪問搭建的靜態(tài)web服務器及其通信過程

二、靜態(tài)Web服務器-返回固定頁面數(shù)據(jù)?

靜態(tài)Web服務器實現(xiàn)步驟

  • 編寫TCP服務端程序
  • 獲取瀏覽器發(fā)送的http請求報文數(shù)據(jù)
  • 讀取固定數(shù)據(jù),將頁面數(shù)據(jù)組裝為http響應報文數(shù)據(jù)發(fā)送給瀏覽器
  • http響應報文數(shù)據(jù)發(fā)送完后,關(guān)閉服務于客戶端的套接字
  • 實現(xiàn)代碼?

    import socket if __name__ == '__main__':server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 創(chuàng)建TCP服務端套接字server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True) # 設(shè)置端口號復用,程序退出端口立即釋放server_socket.bind(('', 9000)) # 綁定端口號server_socket.listen(128) # 設(shè)置監(jiān)聽while True: # 循環(huán)接受客戶端的連接請求comm_socket, ip_port = server_socket.accept() # 等待接受客戶端的連接請求recv_data = comm_socket.recv(4096) # 獲取瀏覽器發(fā)送的http請求報文數(shù)據(jù)print('接收到的數(shù)據(jù)解碼后為:', recv_data.decode('utf-8'))with open('C:/Users/username/Desktop/ubuntu/file1/1.txt', 'rb') as file:file_data = file.read() # 讀取文件數(shù)據(jù)response_line = "HTTP/1.1 200 OK !!!\r\n" # 響應行response_header = "Server: PWS1.0 # 服務器名稱及版本\r\n" # 響應頭response_body = file_data # 響應體response_data = (response_line + response_header + '\r\n').encode('utf-8') + response_body # 將數(shù)據(jù)組裝成HTTP響應報文數(shù)據(jù)發(fā)送給瀏覽器comm_socket.send(response_data) # 發(fā)送響應報文數(shù)據(jù)至瀏覽器comm_socket.close() # 關(guān)閉服務于客戶端的套接字

    輸出如下

    瀏覽器刷新后輸出: 接收到的數(shù)據(jù)解碼后為: GET /file1/1.txt HTTP/1.1 Host: 127.0.0.1:9000 Connection: keep-alive Cache-Control: max-age=0 sec-ch-ua: "Google Chrome";v="105", "Not)A;Brand";v="8", "Chromium";v="105" sec-ch-ua-mobile: ?0 sec-ch-ua-platform: "Windows" Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Accept: 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 Sec-Fetch-Site: none Sec-Fetch-Mode: navigate Sec-Fetch-User: ?1 Sec-Fetch-Dest: document Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9 Cookie: csrftoken=1wb7v0r0BQuokJCxRS4JAO2XApvrHXFP90t2PiYb0mz7AwWS0NoKTi0zNaIjOfTl; Hm_lvt_18f619820855042bca58b32408f44de7=1658219884 If-Modified-Since: Sat, 15 Oct 2022 02:36:31 GMT

    瀏覽器響應如下?

    三、靜態(tài)Web服務器-返回指定頁面數(shù)據(jù)

    實現(xiàn)步驟

  • 獲取用戶請求資源路徑
  • 根據(jù)路徑讀取指定文件數(shù)據(jù)
  • 將指定文件數(shù)據(jù)組裝為響應報文,發(fā)送給瀏覽器
  • 判斷請求文件在服務端不存在,組裝404狀態(tài)響應報文,發(fā)送給瀏覽器
  • 代碼實現(xiàn)

    import socket def main():server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 創(chuàng)建TCP服務端套接字server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True) # 設(shè)置端口號復用,程序退出端口立即釋放server_socket.bind(("", 9000)) # 綁定端口號server_socket.listen(128) # 設(shè)置監(jiān)聽while True:comm_socket, ip_port = server_socket.accept() # 等待接收客戶端連接請求recv_data = comm_socket.recv(4096) # 接收請求的二進制數(shù)據(jù)if len(recv_data) == 0 :print('未獲取到請求數(shù)據(jù)!')comm_socket.close()returnrecv_content = recv_data.decode('utf-8') # 對二進制數(shù)據(jù)解碼print('獲取到的數(shù)據(jù)內(nèi)容為:', recv_content)request_list = recv_content.split(" ", maxsplit=2) # 根據(jù)指定字符串進行分割,最大分割次數(shù)為2request_path = request_list[1] # 獲取請求資源路徑print('請求路徑為:', request_path)if request_path == "/": # 判斷請求的是否是根目錄,若是則返回首頁指定數(shù)據(jù)request_path = "/index.html"try:with open('C:/Users/username/Desktop/ubuntu' + request_path, 'rb') as file: # 動態(tài)打開指定文件file_data = file.read() # 讀取指定文件數(shù)據(jù)except Exception as e: # 請求異常,資源不存在,返回指定404錯誤數(shù)據(jù)with open('C:/Users/username/Desktop/ubuntu/error.html', 'rb') as file: # 打開指定錯誤文件error_data = file.read() # 讀取指定錯誤數(shù)據(jù)response_line = "HTTP/1.1 404 Not Found!!\r\n" # 響應行response_header = "Server: PWS1.0 服務器名稱及版本……\r\n" # 響應頭response_body = error_data # 響應體response_data = (response_line + response_header + '\r\n').encode('utf-8') + response_body # 拼接響應報文comm_socket.send(response_data) # 發(fā)送數(shù)據(jù)給瀏覽器else:response_line = "HTTP/1.1 200 OK # 成功!!\r\n"response_header = "Server: PWS1.0 # 服務器名稱版本!\r\n"response_body = file_dataresponse_data = (response_line + response_header + '\r\n').encode('utf-8') + response_bodycomm_socket.send(response_data)finally:comm_socket.close() # 關(guān)閉服務于客戶端的套接字 if __name__ == '__main__':main()

    輸出如下

    404錯誤輸出: 獲取到的數(shù)據(jù)內(nèi)容為: GET /ab.txt HTTP/1.1 Host: 127.0.0.1:9000 Connection: keep-alive Cache-Control: max-age=0 sec-ch-ua: "Google Chrome";v="105", "Not)A;Brand";v="8", "Chromium";v="105" sec-ch-ua-mobile: ?0 sec-ch-ua-platform: "Windows" Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Accept: 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 Sec-Fetch-Site: none Sec-Fetch-Mode: navigate Sec-Fetch-User: ?1 Sec-Fetch-Dest: document Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9 Cookie: csrftoken=1wb7v0r0BQuokJCxRS4JAO2XApvrHXFP90t2PiYb0mz7AwWS0NoKTi0zNaIjOfTl; Hm_lvt_18f619820855042bca58b32408f44de7=1658219884請求路徑為: /ab.txt 未獲取到請求數(shù)據(jù)!正確響應輸出: 獲取到的數(shù)據(jù)內(nèi)容為: GET /index.html HTTP/1.1 Host: 127.0.0.1:9000 Connection: keep-alive …… …… # 中間部分同錯誤輸出請求路徑為: /index.html 未獲取到請求數(shù)據(jù)!

    錯誤響應

    正確響應

    ??學習導航:http://xqnav.top/

    總結(jié)

    以上是生活随笔為你收集整理的python自带静态web服务器搭建代码实现(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。