Python Http请求json解析库用法解析


Posted in Python onNovember 28, 2020

httpparser介绍

:1.解析字节类型的http与https请求数据

:2.支持已k-v形式修改请求数据

:3.支持重新编码请求数据

源码

import json
__author = "-ling"

def parser(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 = 0
  list = ["method", 'url', 'version']
  for line in request_first_data.split(" "):
    if line != "":
      request_first[list[count]] = line
      count += 1
  # print("解析请求方法 URI协议 版本:",request_first)

  # 请求头(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" and len(restemp) == 3:
        restemp[1] = restemp[1] + ":" +restemp[2]
      request_headers[restemp[0]] = restemp[1]
  # print("请求头(Request Header):",request_headers)

  # 请求正文
  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 = {'content':request_content_temp}

    # print("请求正文:",request_content)
  else:
    pass
    # print("无请求正文!")
  return request_first,request_headers,request_content,request_nextdata

def update_first_data(request_first_data,field,data):
  request_first_data[field] = data


def update_request_headers(request_headers,field,data):
  request_headers[field] = data


def update_request_content(request_content,field,data):
  request_content[field] = data


def encode(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.解析请求数据

request_first,request_headers,request_content,request_nextdata = httpparser.parser(request_data)

2.修改或者增加各个部分的字段使用

  • update_first_data :修改第一行字段数据
  • update_request_headers :修改请求头或者增加请求头字段
  • update_request_content :修改请求内容字段或者增加请求内容

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<h1>foo!</h1>'

解析出来的数据:

注意:(parser传入字节类型数据)

解析数据: {'method': 'HTTP/1.0', 'url': '200', 'version': '

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现网页链接提取的方法分享
Feb 25 Python
10种检测Python程序运行时间、CPU和内存占用的方法
Apr 01 Python
Python os模块学习笔记
Jun 21 Python
python&amp;MongoDB爬取图书馆借阅记录
Feb 05 Python
常见python正则用法的简单实例
Jun 21 Python
python类:class创建、数据方法属性及访问控制详解
Jul 25 Python
Python实现批量压缩图片
Jan 25 Python
Python使用遗传算法解决最大流问题
Jan 29 Python
Python实现求解一元二次方程的方法示例
Jun 20 Python
python将txt文件读取为字典的示例
Dec 22 Python
Python检查ping终端的方法
Jan 26 Python
python用分数表示矩阵的方法实例
Jan 11 Python
基于Django集成CAS实现流程详解
Nov 28 #Python
Django haystack实现全文搜索代码示例
Nov 28 #Python
windows下python 3.9 Numpy scipy和matlabplot的安装教程详解
Nov 28 #Python
关于Python 解决Python3.9 pandas.read_excel(‘xxx.xlsx‘)报错的问题
Nov 28 #Python
Python self用法详解
Nov 28 #Python
Python3.9最新版下载与安装图文教程详解(Windows系统为例)
Nov 28 #Python
python安装sklearn模块的方法详解
Nov 28 #Python
You might like
PHP滚动日志的代码实现
2015/06/10 PHP
PHP asXML()函数讲解
2019/02/03 PHP
javascript背投广告代码的完善
2008/04/08 Javascript
JavaScript打字小游戏代码
2011/12/26 Javascript
jQuery的观察者模式详解
2014/12/22 Javascript
基于JavaScript如何制作遮罩层对话框
2016/01/26 Javascript
javascript实现获取图片大小及图片等比缩放的方法
2016/11/24 Javascript
JS数字千分位格式化实现方法总结
2016/12/16 Javascript
vue.js实现请求数据的方法示例
2017/02/07 Javascript
JS实现图片放大缩小的方法
2017/02/15 Javascript
你可能不知道的JSON.stringify()详解
2017/08/17 Javascript
javascript基于牛顿迭代法实现求浮点数的平方根【递归原理】
2017/09/28 Javascript
基于webpack.config.js 参数详解
2018/03/20 Javascript
微信上传视频文件提示(推荐)
2018/11/22 Javascript
bootstrap与pagehelper实现分页效果
2018/12/29 Javascript
微信公众号开发之微信支付代码记录的实现
2019/10/16 Javascript
解决Layui 表格自适应高度的问题
2019/11/15 Javascript
详解在IDEA中将Echarts引入web两种方式(使用js文件和maven的依赖导入)
2020/07/11 Javascript
基于javascript实现放大镜特效
2020/12/03 Javascript
[03:04]2018年国际邀请赛典藏宝瓶&莱恩声望物品展示 片尾有彩蛋
2018/06/04 DOTA
[04:32]玩具屠夫中文语音节选
2020/08/23 DOTA
[38:38]完美世界DOTA2联赛PWL S3 access vs Rebirth 第二场 12.17
2020/12/18 DOTA
python抓取京东价格分析京东商品价格走势
2014/01/09 Python
详谈python在windows中的文件路径问题
2018/04/28 Python
python切片及sys.argv[]用法详解
2018/05/25 Python
pandas将多个dataframe以多个sheet的形式保存到一个excel文件中
2019/10/10 Python
python类中super() 的使用解析
2019/12/19 Python
python绘制分布折线图的示例
2020/09/24 Python
css3编写浏览器背景渐变背景色的方法
2018/03/05 HTML / CSS
html5标记文字_动力节点Java学院整理
2017/07/11 HTML / CSS
蔻驰美国官网:COACH美国
2016/08/18 全球购物
MyFrenchPharma中文网:最大的法国药妆平台
2016/10/07 全球购物
Ray-Ban雷朋奥地利官网:全球领先的太阳眼镜品牌
2020/10/12 全球购物
入党综合考察材料
2014/06/02 职场文书
《抽屉原理》教学反思
2016/02/20 职场文书
《月歌。》宣布制作10周年纪念剧场版《RABBITS KINGDOM THE MOVIE》
2022/04/02 日漫