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爬虫框架Scrapy安装使用步骤
Apr 01 Python
Python读取MRI并显示为灰度图像实例代码
Jan 03 Python
python删除字符串中指定字符的方法
Aug 13 Python
Python多进程写入同一文件的方法
Jan 14 Python
如何在Python中实现goto语句的方法
May 18 Python
python Pandas库基础分析之时间序列的处理详解
Jul 13 Python
python操作cfg配置文件方式
Dec 22 Python
解决Pymongo insert时会自动添加_id的问题
Dec 05 Python
详解Python中的文件操作
Jan 14 Python
基于pycharm 项目和项目文件命名规则的介绍
Jan 15 Python
浅谈Python中的正则表达式
Jun 28 Python
python开发的自动化运维工具ansible详解
Aug 07 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常用正则表达式集锦
2014/08/17 PHP
php学习笔记之基础知识
2014/11/08 PHP
Linux+Nginx+MySQL下配置论坛程序Discuz的基本教程
2015/12/23 PHP
JavaScript 继承详解 第一篇
2009/08/30 Javascript
jQuery 表单验证扩展代码(二)
2010/10/20 Javascript
JavaScript 计算图片加载数量的代码
2011/01/01 Javascript
jQuery之日期选择器的深入解析
2013/06/19 Javascript
无闪烁更新网页内容JS实现
2013/12/19 Javascript
JavaScript 基本概念
2015/01/20 Javascript
js实现select二级联动下拉菜单
2020/04/17 Javascript
Angularjs中UI Router的使用方法
2016/05/14 Javascript
通过BootStrap实现轮播图的实际应用
2016/09/26 Javascript
jQuery实现花式轮播之圣诞节礼物传送效果
2016/12/25 Javascript
jQuery实现可拖动进度条实例代码
2017/06/21 jQuery
vue mint-ui 实现省市区街道4级联动示例(仿淘宝京东收货地址4级联动)
2017/10/16 Javascript
JS执行控制之节流模式实例分析
2018/12/21 Javascript
js中的reduce()函数讲解
2019/01/18 Javascript
JS实现的对象去重功能示例
2019/06/04 Javascript
vue双击事件2.0事件监听(点击-双击-鼠标事件)和事件修饰符操作
2020/07/27 Javascript
ElementUI 修改默认样式的几种办法(小结)
2020/07/29 Javascript
Openlayers学习之加载鹰眼控件
2020/09/28 Javascript
[00:36]DOTA2风云人物相约完美“圣”典 12月17日不见不散
2016/11/30 DOTA
pycharm 使用心得(五)断点调试
2014/06/06 Python
使用grappelli为django admin后台添加模板
2014/11/18 Python
数据清洗--DataFrame中的空值处理方法
2018/07/03 Python
Python 定义只读属性的实现方式
2020/03/05 Python
pycharm实现在虚拟环境中引入别人的项目
2020/03/09 Python
css3实现元素环绕中心点布局的方法示例
2019/01/15 HTML / CSS
物流专业求职计划书
2014/01/10 职场文书
《太阳》教学反思
2014/02/21 职场文书
2014高考励志标语
2014/06/05 职场文书
商业项目策划方案
2014/06/05 职场文书
家具公司总经理岗位职责
2014/07/08 职场文书
2015年社区纪检工作总结
2015/04/21 职场文书
公司职员入党自传书
2015/06/26 职场文书
小学生暑假生活总结
2015/07/13 职场文书