摘要:請求頭的換行使用的是。編寫一個類,來解析請求的方法路徑和,如下下一篇文章編程響應
前文:【python socket編程】—— 1.初探
在上一篇文章中我們知道,socket.accept()接受的數據是請求頭,請求頭格式是這樣的:
POST /login HTTP/1.1 Host: 127.0.0.1:1207 User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:58.0) Gecko/20100101 Firefox/58.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate Referer: http://127.0.0.1:1207/login Content-Type: application/x-www-form-urlencoded Content-Length: 27 Cookie: D9zb2HfPUf8RI7AOwsUZpiBq Connection: keep-alive Upgrade-Insecure-Requests: 1 username=Harp&password=1234
這是一個POST請求,請求頭第一行是POST /login HTTP/1.1,以空格劃分,分別是請求方法、路徑和協議,之后則是key: value形式的各種數據組成的header,我們暫且不管每一行分別是什么意思,然后是空行,結尾的username=Harp&password=1234是body部分,表單通過POST方法提交的數據(如賬號密碼)就在這里,GET請求則沒有body部分。請求頭的換行使用的是"/r/n"。
編寫一個Request類,來解析請求的方法、路徑、header和body,如下:
#!/usr/bin/env python # -*- coding:utf-8 -*- # contact: liutao25@baidu.com from urllib.parse import unquote, quote class Request: def __init__(self, r): self.content = r self.method = r.split()[0] self.path = r.split()[1] self.body = r.split(" ", 1)[1] def form_body(self): return self._parse_parameter(self.body) def parse_path(self): index = self.path.find("?") if index == -1: return self.path, {} else: path, query_string = self.path.split("?", 1) query = self._parse_parameter(query_string) return path, query @property def headers(self): header_content = self.content.split(" ", 1)[0].split(" ")[1:] result = {} for line in header_content: k, v = line.split(": ") result[quote(k)] = quote(v) return result @staticmethod def _parse_parameter(parameters): args = parameters.split("&") query = {} for arg in args: k, v = arg.split("=") query[k] = unquote(v) return query
下一篇文章:【python socket編程】—— 3.響應
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/41329.html
摘要:從導入相應函數,即傳入一個上一步中的類,返回對應的網頁內容,具體實現將在后續講解。后續只要去處理解析請求和響應部分即可,主程序可以不用再修改。下一篇文章編程解析請求頭 Flask或者其他框架都是封裝的比較完善,我們可以不去關注路由、SESSION等到底是怎么實現的,現在我們使用socket來實現一個帶有注冊、登錄功能的To do網站,這樣能對后端框架了解的稍微更深入一點(當然你也可以直...
摘要:前文編程解析請求頭的框架和解析請求的類我們都寫好了,現在唯一要做的就是處理相應。回復響應的原理就是這樣,后續每增加一個路徑,就在字典中增加一條及增加一個對應的響應函數。下一篇文章編程實現函數 前文:【python socket編程】—— 2.解析http請求頭 web的框架和解析請求的Request類我們都寫好了,現在唯一要做的就是處理相應。編寫一個route_dict字典,key是...
摘要:當一個客戶端連接時,它將返回一個新的對象,對象中有表示當前連接的和一個由主機端口號組成的連接的元組,更多關于元組值的內容可以查看地址族一節中的詳情這里必須要明白我們通過調用方法擁有了一個新的對象。 博客原文: https://keelii.com/2018/09/24/socket-programming-in-python/ 說明 本書翻譯自 realpython 網站上的文章教程 ...
摘要:事實上,協議確實是基于協議實現的。的可選參數用于監聽事件另外,它也監聽事件,只不過回調函數是自己實現的。并且會把本次連接的套接字文件描述符封裝成對象,作為事件的參數。過載保護理論上,允許的同時連接數只與進程可以打開的文件描述符上限有關。 作者:正龍(滬江Web前端開發工程師)本文為原創文章,轉載請注明作者及出處 上文走進Node.js啟動過程中我們算是成功入門了。既然Node.js的強...
閱讀 3138·2021-11-24 10:24
閱讀 2930·2021-11-11 16:54
閱讀 3066·2021-09-22 15:55
閱讀 2027·2019-08-30 15:44
閱讀 1901·2019-08-29 18:41
閱讀 2761·2019-08-29 13:43
閱讀 3053·2019-08-29 12:51
閱讀 1172·2019-08-26 12:19