python實現簡單的web伺服器

2021-07-15 03:52:38 字數 4629 閱讀 8147

最近有需求需要提供乙個簡單的 web 伺服器,用於客戶端上報一些內容,採用 post 方式上報並支援 gzip 壓縮,**如下:

#!python

#-*- coding:utf-8 -*-

''' 上報資料用 gzip 壓縮了,所以用 http 伺服器接收資料並輸出接收到的資料

## 只儲存過去7天的日誌,按天建立新的日誌

'''接收上報的檔案,引數為:

imei=***&starttime=timestamp&urlnum=1&url=***&thistime=now

使用 gzip 上報,接收到上報檔案後,按照 imei 建立資料夾;

相同的 starttime 表示是同一次請求的資料;

urlnum 表示是該次請求的第幾次跳轉,每次跳轉會是乙個新的檔案;

url表示本次url;

thistime 表示本次請求的開始時間;

最終儲存結果如下:

+-- urlnum_thistime.gzip

|-- starttime ——|-- urlnum_thistime.gzip

| +-- readme.txt 每個檔案上傳ip,開始時間,對應的 url

imei ——-|

ip: ***

starttime: ***

url: ***

------

'''global logger

clientip = self.client_address

# 解析引數

uri = self.path

try:

tmpurlparam = uri.split('?')[1]

tmpurlparam = tmpurlparam.split('&')

urlparam =

for kv in tmpurlparam:

tmparr = kv.split('=')

urlparam[tmparr[0]] = tmparr[1]

for key in urlparam:

if not urlparam[key]:

logger.error("\nclientip = %s, uri = %s, is wrong" % (clientip, uri))

self.errorresponse('parameter %s is empty' % key)

except exception, e:

logger.error("uri = %s, analyse error" % uri)

self.errorresponse('parameter error')

return

# 判斷檔案是否已存在,已存在則新增到後面,否則新建檔案

filepath = os.path.join(urlparam['imei'], urlparam['starttime'], urlparam['urlnum'] + '_' + urlparam['thistime'] + '.zip')

# 檔案已經存在,則新增到檔案末尾

if os.path.isfile(filepath):

fp = open(filepath, 'ab')

else:

## 檔案不存在表示這個該檔案第乙個資料報,新建檔案並新增記錄到 readme.txt

dirname = os.path.dirname(filepath)

if not os.path.isdir(dirname):

os.makedirs(dirname)

fp = open(filepath, 'ab+')

readmepath = os.path.join(dirname, 'readme.txt')

if os.path.isfile(readmepath):

tmpfp = open(readmepath, 'a')

else:

tmpfp = open(readmepath, 'a+')

now = time.strftime("%y-%m-%d %h:%m:%s", time.localtime(time.time()))

tmpcontent = 'ip: %s\nstarttime: %s\nurl: %s\noffer: %s\n\n' % (str(clientip), now, urllib.unquote(urlparam['url']), urllib.unquote(urlparam['offer']))

tmpfp.write(tmpcontent)

tmpfp.close()

# 獲取本次上報資料

經實際使用,對不高的併發處理完全可以應付。這種自定義的上報工作,要是用其他語言來寫不知道可以怎麼實現

python 實現簡單的web

等待某個人連線我們的伺服器並向我們傳送乙個http請求 解析該請求 了解該請求希望請求的內容 伺服器根據請求抓取需要的資料 從伺服器本地檔案中讀取或者程式動態生成 將資料格式化為請求需要的格式 返回http響應 步驟1 2 6的操作對所有web應用都是一樣的,這部分內容python標準庫中的base...

python socket簡單實現SSH伺服器端

server import socket,os server socket.socket server.bind localhost 9999 server.listen while true conn,addr server.accept while true data conn.recv 102...

python flask幾分鐘實現web服務的例子

目錄 1.安裝python3 2.安裝flask 3.簡單的伺服器 編寫 4.設定flask app路徑並啟動伺服器程式 1.安裝python3 python3的安裝這裡就不過多贅述了,網上直接 安裝即可 2.安裝flask 安裝完python3後我們就可以用pip工具進行安裝了,當然還有很多安裝方...