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的Bottle框架中使用微信API的示例
Apr 23 Python
在Django的模型中添加自定义方法的示例
Jul 21 Python
python Django框架实现自定义表单提交
Mar 25 Python
Python栈算法的实现与简单应用示例
Nov 01 Python
将字典转换为DataFrame并进行频次统计的方法
Apr 08 Python
python 实现登录网页的操作方法
May 11 Python
django 使用 request 获取浏览器发送的参数示例代码
Jun 11 Python
python字符串替换第一个字符串的方法
Jun 26 Python
python实现矩阵和array数组之间的转换
Nov 29 Python
pytorch查看torch.Tensor和model是否在CUDA上的实例
Jan 03 Python
Python脚本实现Zabbix多行日志监控过程解析
Aug 26 Python
Python实现Excel文件的合并(以新冠疫情数据为例)
Mar 20 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
thinkphp数据查询和遍历数组实例
2014/11/28 PHP
浅析PHP文件下载原理
2014/12/25 PHP
Ubuntu12下编译安装PHP5.3开发环境
2015/03/27 PHP
Zend Framework教程之视图组件Zend_View用法详解
2016/03/05 PHP
THREE.JS入门教程(4)创建粒子系统
2013/01/24 Javascript
JavaScript插件化开发教程 (二)
2015/01/27 Javascript
js实现文字跟随鼠标移动而移动的方法
2015/02/28 Javascript
在JavaScript中操作时间之getUTCDate()方法的使用
2015/06/10 Javascript
基于jquery实现可定制的web在线富文本编辑器附源码下载
2015/11/17 Javascript
JS实现DIV容器赋值的方法
2015/12/14 Javascript
JavaScript实现时间倒计时跳转(推荐)
2016/06/28 Javascript
JS实现对json对象排序并删除id相同项功能示例
2018/04/18 Javascript
layui的表单提交以及验证和修改弹框的实例
2019/09/09 Javascript
解决vue使用vant下拉框van-dropdown-item 绑定title值不变问题
2020/08/05 Javascript
OpenLayers3实现图层控件功能
2020/09/25 Javascript
复制粘贴功能的Python程序
2008/04/04 Python
在Python中使用SimpleParse模块进行解析的教程
2015/04/11 Python
浅析Python中signal包的使用
2015/11/13 Python
python Opencv将图片转为字符画
2021/02/19 Python
Flask框架web开发之零基础入门
2018/12/10 Python
python 实现识别图片上的数字
2019/07/30 Python
PyTorch中的C++扩展实现
2020/04/02 Python
python 利用百度API识别图片文字(多线程版)
2020/12/14 Python
初中生物教学反思
2014/01/10 职场文书
美国探亲签证邀请信
2014/02/05 职场文书
规划编制实施方案
2014/03/15 职场文书
股权收购意向书
2014/04/01 职场文书
《花木兰》教学反思
2014/04/09 职场文书
党的群众路线教育实践活动对照检查材料(教师)
2014/09/24 职场文书
2014超市收银员工作总结
2014/11/13 职场文书
专职安全员岗位职责
2015/04/11 职场文书
基层组织建设年活动总结
2015/05/09 职场文书
小学中队长竞选稿
2015/11/20 职场文书
2019各种承诺书范文
2019/06/24 职场文书
浅谈Python项目的服务器部署
2021/04/25 Python
CSS3中Animation实现简单的手指点击动画的示例
2021/07/15 HTML / CSS