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正则表达式 re模块使用说明
May 19 Python
Python实现字符串与数组相互转换功能示例
Sep 22 Python
Python实现的桶排序算法示例
Nov 29 Python
Python决策树和随机森林算法实例详解
Jan 30 Python
利用django+wechat-python-sdk 创建微信服务器接入的方法
Feb 20 Python
详解python中__name__的意义以及作用
Aug 07 Python
详解Python修复遥感影像条带的两种方式
Feb 23 Python
python 成功引入包但无法正常调用的解决
Mar 09 Python
python3+selenium获取页面加载的所有静态资源文件链接操作
May 04 Python
简单了解Python多态与属性运行原理
Jun 15 Python
Opencv 图片的OCR识别的实战示例
Mar 02 Python
Python实战之OpenCV实现猫脸检测
Jun 26 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中支持多种编码的中文字符串截取函数!
2007/03/20 PHP
FCKeditor添加自定义按钮
2008/03/27 PHP
PHP中利用substr_replace将指定两位置之间的字符替换为*号
2011/01/27 PHP
关于php正则匹配汉字的方法介绍
2013/04/25 PHP
ThinkPHP的截取字符串函数无法显示省略号的解决方法
2014/06/25 PHP
非常有用的9个PHP代码片段
2016/04/06 PHP
浅谈PHP中的数据传输CURL
2016/09/06 PHP
如何打开php的gd2库
2017/02/09 PHP
PHP实现在对象之外访问其私有属性private及保护属性protected的方法
2017/11/20 PHP
cssQuery()的下载与使用方法
2007/01/12 Javascript
html读出文本文件内容
2007/01/22 Javascript
利用jQuery实现可输入搜索文字的下拉框
2013/10/23 Javascript
js如何判断用户是否是用微信浏览器
2014/06/05 Javascript
Bootstrap的图片轮播示例代码
2015/08/31 Javascript
后端接收不到AngularJs中$http.post发送的数据原因分析及解决办法
2016/07/05 Javascript
Angularjs---项目搭建图文教程
2016/07/08 Javascript
node实现定时发送邮件的示例代码
2017/08/26 Javascript
react中fetch之cors跨域请求的实现方法
2018/03/14 Javascript
解决axios发送post请求返回400状态码的问题
2018/08/11 Javascript
详解TypeScript+Vue 插件 vue-class-component的使用总结
2019/02/18 Javascript
vue + typescript + video.js实现 流媒体播放 视频监控功能
2019/07/07 Javascript
在layui下对元素进行事件绑定的实例
2019/09/06 Javascript
从零搭一个自用的前端脚手架的方法步骤
2019/09/23 Javascript
layui实现下拉复选功能的例子(包括数据的回显与上传)
2019/09/24 Javascript
微信小程序自定义支持图片的弹窗
2020/12/21 Javascript
R vs. Python 数据分析中谁与争锋?
2017/10/18 Python
python实现简易版计算器
2020/06/22 Python
Python中的函数作用域
2018/05/07 Python
pytorch实现focal loss的两种方式小结
2020/01/02 Python
浅谈利用缓存来优化HTML5 Canvas程序的性能
2015/05/12 HTML / CSS
详解如何使用rem或viewport进行移动端适配
2020/08/14 HTML / CSS
俄罗斯药房连锁店:ASNA
2020/06/20 全球购物
个人简历自我评价范文
2014/02/04 职场文书
活动总结书
2014/05/08 职场文书
初中差生评语
2014/12/29 职场文书
解决Mysql多行子查询的使用及空值问题
2022/01/22 MySQL