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函数学习笔记
Oct 07 Python
详解Python 数据库 (sqlite3)应用
Dec 07 Python
Python使用random.shuffle()打乱列表顺序的方法
Nov 08 Python
pygame游戏之旅 添加游戏界面按键图形
Nov 20 Python
python中使用ctypes调用so传参设置遇到的问题及解决方法
Jun 19 Python
HTML的form表单和django的form表单
Jul 25 Python
Pytorch GPU显存充足却显示out of memory的解决方式
Jan 13 Python
Python while循环使用else语句代码实例
Feb 07 Python
PyCharm2020.1.1与Python3.7.7的安装教程图文详解
Aug 07 Python
Python浮点型(float)运算结果不正确的解决方案
Sep 22 Python
Python爬虫自动化爬取b站实时弹幕实例方法
Jan 26 Python
Python代码实现双链表
May 25 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安装和设置
2015/07/27 PHP
PHP符合PSR编程规范的实例分享
2016/12/21 PHP
Laravel修改验证提示信息为中文的示例
2019/10/23 PHP
[JS源码]超长文章自动分页(客户端版)
2007/01/09 Javascript
解析DHTML,JavaScript,DOM,BOM以及WEB标准的描述
2013/06/19 Javascript
js改变文章字体大小的实例代码
2013/11/27 Javascript
使用Chart.js图表库制作漂亮的响应式表单
2015/10/28 Javascript
第一次动手实现bootstrap table分页效果
2016/09/22 Javascript
AngularJS使用ng-repeat和ng-if实现数据的删选显示效果示例【适用于表单数据的显示】
2016/12/13 Javascript
详解angular2实现ng2-router 路由和嵌套路由
2017/03/24 Javascript
一次围绕setTimeout的前端面试经验分享
2017/06/15 Javascript
Node.js+jade抓取博客所有文章生成静态html文件的实例
2017/09/19 Javascript
浅谈vue中使用图片懒加载vue-lazyload插件详细指南
2017/10/23 Javascript
react-router4 配合webpack require.ensure 实现异步加载的示例
2018/01/18 Javascript
浅谈Angular6的服务和依赖注入
2018/06/27 Javascript
Vue的watch和computed方法的使用及区别介绍
2018/09/06 Javascript
JS控制GIF图片的停止与显示
2019/10/24 Javascript
vue中el-input绑定键盘按键(按键修饰符)
2020/07/22 Javascript
[06:45]DOTA2-DPC中国联赛 正赛 Magma vs LBZS 选手采访
2021/03/11 DOTA
以一段代码为实例快速入门Python2.7
2015/03/31 Python
Python编程中flask的简介与简单使用
2018/12/28 Python
使用python os模块复制文件到指定文件夹的方法
2019/08/22 Python
django-crontab实现服务端的定时任务的示例代码
2020/02/17 Python
Python制作一个仿QQ办公版的图形登录界面
2020/09/22 Python
Python截图并保存的具体实例
2021/01/14 Python
CSS3按钮鼠标悬浮实现光圈效果源码
2016/09/11 HTML / CSS
Html5原创俄罗斯方块(基于canvas)
2019/01/07 HTML / CSS
Stuart Weitzman美国官网:美国奢华鞋履品牌
2016/08/18 全球购物
财务会计专业求职信
2014/06/09 职场文书
物业管理专业求职信
2014/06/11 职场文书
高校教师个人工作总结2014
2014/12/17 职场文书
高一军训口号
2015/12/25 职场文书
2016应届毕业生自荐信范文
2016/01/28 职场文书
某学校的2019年度工作报告范本
2019/10/11 职场文书
python 用递归实现通用爬虫解析器
2021/04/16 Python
MySQL修改默认引擎和字符集详情
2021/09/25 MySQL