Python Http請求json解析庫

2021-10-10 05:19:37 字數 3955 閱讀 7851

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 ...