クライアントが要求を送信し、サーバーは、靴下を変更します
クライアントがデータを送信し、サーバはCONN変更されます
re.match()は、文字列の先頭にマッチ
インポートソケット インポートSELECTの クラスのHttpRequest(オブジェクト): 「」「 ユーザパッケージユーザ要求情報 」、「」 DEF __init__ (セルフ、コンテンツ): 「」「 :PARAM内容:ユーザによって送信された要求データ:要求ヘッダと要求ボディ 」「」 self.content = コンテンツ self.header_bytes = バイト() self.body_bytes = バイト() self.header_dict = {} self.method = "" self.url = "" 自己。プロトコル= 「」 self.initialize() self.initialize_headers() DEF (自己)初期化: TEMP = self.content.split(B ' \ R \ n \ Rを\ n '、1 ) もし LEN(TEMP)== 1 : self.header_bytes + = TEMP 他: H、B = 一時 self.header_bytes + = 時間 self.body_bytes + = Bの @property DEF header_str(自己): 戻り STR(self.header_bytes、エンコーディング= ' UTF-8 ') DEF initialize_headers(自己): ヘッダー = self.header_str.split(' の\ r \ n ' ) first_line =ヘッダー[0] .split(' ' ) 場合でlen(first_line)== 3 : self.method、self.url 、self.protocol =ヘッダー[0] .split(' ' ) のための行にヘッダー: KV = line.split(' :' ) もし LEN(KV)== 2 : K、V = KV self.header_dict [K] = Vの #のクラスフューチャー(オブジェクト): # デフ__init __(自己): # self.result =なし デフメイン(リクエスト): リターン " メイン" デフ指数(要求): リターン " indexasdfasdfasdf " ルーター = [ (' /メイン/ ' 、主)、 (' /インデックス/ ' 、インデックス) ] DEF (実行): 靴下 = socket.socket(はsocket.AF_INET、socket.SOCK_STREAM) sock.setsockopt(socket.SOL_SOCKET、socket.SO_REUSEADDR、 1 ) sock.bind((" 127.0.0.1 "、9999 、)) (偽)sock.setblocking sock.listen( 128 ) の入力 = [] inputs.append(靴下を) 一方TRUE: RLIST、wlist、ELIST = select.select(入力、[]、[]、0.05 ) のために R でRLIST: もし R == 靴下: "" " 新请求到来""" CONN、ADDR = 靴下。受け入れます() conn.setblocking(偽) inputs.append(コネチカット州) 他: 「」「クライアントのデータに「」」 データ = B 「」 しばらく真: 試してみる: チャンク = r.recv(1024 ) のデータ =データ+ チャンク を除く例外E AS: チャンク = なし IF ないチャンク: BREAK #のデータ処理:リクエストヘッダとリクエストボディ =要求のHttpRequest(データ) #1のGet URLリクエストヘッダ #2中央が外側に一致し、指定された関数の取得 #3は、戻り値取得機能を実行 #ASFD;戻り値r.sendall(b'alskdjalksdjf 4. 「) インポート再 フラグに = Falseの FUNC = なし ための経路におけるルータ: IF re.match(ルート[0]、request.url): フラグに = Trueの FUNC [1 =ルート] BREAK IF フラグに: 結果 = FUNC(リクエスト) r.sendall(バイト(その結果、エンコード = ' UTF-8 ' )) 他: r.sendall(B " 404 " ) inputs.remove(R) r.close() もし __name__ == ' __main__ " : 実行()