httpparser介紹
1.解析位元組型別的http與https請求資料
2.支援已k-v形式修改請求資料
3.支援重新編碼請求資料
原始碼
import json
__author =
"-ling"
defparser
(request_data)
:# 獲取請求的三個段:
# 1.請求方法 uri協議 版本
# 2.請求頭(request header)
# 3.請求正文
index0 = request_data.find(b"\r\n\r\n"
) request_predata = request_data[
0:index0]
index1 = request_predata.find(b"\r\n"
)# 請求方法 uri協議 版本
request_first_data = request_predata[
0:index1]
.decode(
"utf-8"
) request_first =
count =
0list=[
"method"
,'url'
,'version'
]for line in request_first_data.split(
" ")
:if line !="":
request_first[
list
[count]
]= line
count +=
1# print("解析請求方法 uri協議 版本:",request_first)
# python學習交流qq群:778463939
# 請求頭(request header)
request_header_data = request_predata[index1:
].decode(
"utf-8"
) request_headers =
for line in request_header_data.split(
"\r\n"):
if line !="":
line = line.replace(
" ","")
restemp = line.split(
":")
if restemp[0]
=="host"
andlen
(restemp)==3
: restemp[1]
= restemp[1]
+":"
+restemp[2]
request_headers[restemp[0]
]= restemp[1]
# print("請求頭(request header):",request_headers)
# python學習交流qq群:778463939
# 請求正文
request_nextdata = request_data[index0:
].decode(
"utf-8"
) request_content_temp = request_nextdata.replace(
"\r\n",""
) request_content =
none
if request_content_temp !="":
try:
request_content = json.loads(request_content_temp)
except
: request_content =
# print("請求正文:",request_content)
else
:pass
# print("無請求正文!")
return request_first,request_headers,request_content,request_nextdata
defupdate_first_data
(request_first_data,field,data)
: request_first_data[field]
= data
defupdate_request_headers
(request_headers,field,data)
: request_headers[field]
= data
defupdate_request_content
(request_content,field,data)
: request_content[field]
= data
defencode
(request_first_data,request_headers,request_content)
: request_data = b""
list=[
"method"
,'url'
,'version'
]for key in
list
: request_data +=
(request_first_data[key]
+" "
).encode(
"utf-8"
) request_data +=
"\r\n"
.encode(
"utf-8"
)for key in request_headers.keys():
request_data +=
(key +
":"+ request_headers[key]
).encode(
"utf-8"
) request_data +=
"\r\n"
.encode(
"utf-8"
) request_data +=
"\r\n"
.encode(
"utf-8"
)if request_content !=
none
: request_data += json.dumps(request_content)
.encode(
"utf-8"
)# print("重新編碼以後的資料:",request_data.decode("utf-8"))
return request_data
如何使用
1.解析請求資料
2.修改或者增加各個部分的字段使用
3.再編碼三個部分的資料
encode(request_first_data,request_headers,request_content)
示例(http返回資料如下):
b'http/1.0 200 ok\r\ncontent-type: text/html; charset=utf-8\r\ncontent-length: 13\r\nserver: werkzeug/1.0.1 python/3.7.7\r\ndate: thu, 15 oct 2020 02:58:54 gmt\r\n\r\n'
解析出來的資料:
注意:(parser傳入位元組型別資料)
解析資料:
Python HTTP請求 簡述
簡單的了解一下使用python發起http請求 發起沒有引數的get請求 import requests 匯入request模組,request模組是用來發起http請求 import requests url變數設定 請求的 url 已物件的形式返回,賦值給r。requests.get是使用req...
python http請求工具Requests
只涉及一些常用的方法,一些高階特性檢視尾部鏈結 安裝pip install requests r 是response物件 r requests.get get r requests.post post r requests.put put r requests.delete dele r reque...
Python HTTP協議簡介
http是在網路上傳輸html的協議,用於瀏覽器和伺服器的通訊。http請求 步驟1 瀏覽器首先向伺服器傳送http請求,請求包括 方法 get還是post,get僅請求資源,post會附帶使用者資料 路徑 full url path 網域名稱 由host頭指定 host www.sina.com ...