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

 更新时间:2020年11月28日 11:48:49   作者:-零  
这篇文章主要介绍了Python Http请求json解析库用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

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 Exception常规异常基类详解

    python Exception常规异常基类详解

    这篇文章主要为大家介绍了python Exception常规异常基类详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • python3.7.3版本和django2.2.3版本是否可以兼容

    python3.7.3版本和django2.2.3版本是否可以兼容

    在本篇文章里小编给大家整理的是一篇关于python3.7.3版本和django2.2.3版本是否可以兼容的相关知识点内容,有兴趣的朋友们可以学习下。
    2020-09-09
  • Python3 Click模块的使用方法详解

    Python3 Click模块的使用方法详解

    这篇文章主要介绍了Python3 Click模块的使用方法详解,需要的朋友可以参考下
    2020-02-02
  • 一次性彻底讲透Python中pd.concat与pd.merge

    一次性彻底讲透Python中pd.concat与pd.merge

    本文主要介绍了一次性彻底讲透Python中pd.concat与pd.merge,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • python矩阵转换为一维数组的实例

    python矩阵转换为一维数组的实例

    今天小编就为大家分享一篇python矩阵转换为一维数组的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • Python打印斐波拉契数列实例

    Python打印斐波拉契数列实例

    这篇文章主要介绍了Python打印斐波拉契数列的方法,实例分析了基于Python实现斐波那契数列的实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • Python多进程并发与多线程并发编程实例总结

    Python多进程并发与多线程并发编程实例总结

    这篇文章主要介绍了Python多进程并发与多线程并发编程,结合实例形式总结分析了Python编程中的多进程并发与多线程并发相关概念、使用方法与操作注意事项,需要的朋友可以参考下
    2018-02-02
  • 24式加速你的Python(小结)

    24式加速你的Python(小结)

    这篇文章主要介绍了24式加速你的Python(小结),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-06-06
  • Python获取文件所在目录和文件名的方法

    Python获取文件所在目录和文件名的方法

    下面小编就为大家带来一篇Python获取文件所在目录和文件名的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • 使用python解析json字段的3种方式实例

    使用python解析json字段的3种方式实例

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,下面这篇文章主要给大家介绍了关于使用python解析json字段的3种方式,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07

最新评论