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语言实现获取主机名根据端口杀死进程
Mar 31 Python
详解Python中类的定义与使用
Apr 11 Python
Python删除Java源文件中全部注释的实现方法
Aug 30 Python
CentOS 6.5中安装Python 3.6.2的方法步骤
Dec 03 Python
Python排序算法之选择排序定义与用法示例
Apr 29 Python
Django中间件实现拦截器的方法
Jun 01 Python
python中scikit-learn机器代码实例
Aug 05 Python
浅析Python函数式编程
Oct 06 Python
Python使用configparser库读取配置文件
Feb 22 Python
python新式类和经典类的区别实例分析
Mar 23 Python
在django中实现choices字段获取对应字段值
Jul 12 Python
Python如何实现Paramiko的二次封装
Jan 30 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
PHPMYADMIN 简明安装教程 推荐
2010/03/07 PHP
php简单实现MVC
2015/02/05 PHP
php实现兼容2038年后Unix时间戳转换函数
2015/03/18 PHP
PHP自带方法验证邮箱是否存在
2016/02/01 PHP
PHP实现对xml进行简单的增删改查(CRUD)操作示例
2017/05/19 PHP
PHP重置数组为连续数字索引的几种方式总结
2018/03/12 PHP
js直接编辑当前cookie的脚本
2008/09/14 Javascript
Jquery插件之多图片异步上传
2010/10/20 Javascript
extjs 04_grid 单击事件新发现
2012/11/27 Javascript
IE6浏览器下resize事件被执行了多次解决方法
2012/12/11 Javascript
利用CSS、JavaScript及Ajax实现高效的图片预加载
2013/10/16 Javascript
javascript计算用户打开网页的停留时间
2014/01/09 Javascript
js获取当前地址 JS获取当前URL的示例代码
2014/02/26 Javascript
jQuery的几个我们必须了解的特点
2015/05/03 Javascript
JavaScript让Textarea支持tab按键的方法
2015/06/26 Javascript
JS实现从网页顶部掉下弹出层效果的方法
2015/08/06 Javascript
javascript弹出窗口实现代码
2015/11/12 Javascript
原生javascript+css3编写的3D魔方动画旋扭特效
2016/03/14 Javascript
早该知道的7个JavaScript技巧
2016/06/21 Javascript
js中的触发事件对象event.srcElement与event.target详解
2017/03/15 Javascript
VUE 全局变量的几种实现方式
2018/08/22 Javascript
详解使用uni-app开发微信小程序之登录模块
2019/05/09 Javascript
通过原生vue添加滚动加载更多功能
2019/11/21 Javascript
解决vue项目打包上服务器显示404错误,本地没出错的问题
2020/11/03 Javascript
Python使用中文正则表达式匹配指定中文字符串的方法示例
2017/01/20 Python
Python编程实现tail-n查看日志文件的方法
2019/07/08 Python
Pytorch 之修改Tensor部分值方式
2019/12/27 Python
python3检查字典传入函数键是否齐全的实例
2020/06/05 Python
python实现二分类和多分类的ROC曲线教程
2020/06/15 Python
CSS3教程(6):创建网站多列
2009/04/02 HTML / CSS
全球酒店预订网站:Hotels.com
2016/08/10 全球购物
美国著名的婴儿学步鞋老品牌:Robeez
2016/08/20 全球购物
大家检讨书5000字
2014/02/03 职场文书
经典搞笑版检讨书
2015/02/19 职场文书
Java 通过手写分布式雪花SnowFlake生成ID方法详解
2022/04/07 Java/Android
JS前端使用canvas实现扩展物体类和事件派发
2022/08/05 Javascript