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解析xml成对应的html示例分享
Apr 02 Python
python实现对一个完整url进行分割的方法
Apr 29 Python
python实现爬虫统计学校BBS男女比例之数据处理(三)
Dec 31 Python
简单谈谈Python流程控制语句
Dec 04 Python
python中reduce()函数的使用方法示例
Sep 29 Python
python爬取酷狗音乐排行榜
Feb 20 Python
python 用户交互输入input的4种用法详解
Sep 24 Python
将python安装信息加入注册表的示例
Nov 20 Python
使用pytorch实现可视化中间层的结果
Dec 30 Python
使用Python获取当前工作目录和执行命令的位置
Mar 09 Python
python 输入字符串生成所有有效的IP地址(LeetCode 93号题)
Oct 15 Python
python 使用tkinter与messagebox写界面和弹窗
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
解析Extjs与php数据交互(增删查改)
2013/06/25 PHP
php使用sql server验证连接数据库的方法
2014/12/25 PHP
Laravel 简单实现Ajax滚动加载示例
2019/10/22 PHP
javascript 数组排序函数
2009/08/20 Javascript
jQuery 操作下拉列表框实现代码
2010/02/22 Javascript
Jquery 实现checkbox全选方法
2015/01/28 Javascript
chrome调试javascript详解
2015/10/21 Javascript
javascript伸缩型菜单实现代码
2015/11/16 Javascript
js不间断滚动的简单实现
2016/06/03 Javascript
jQuery实现的导航下拉菜单效果
2016/07/04 Javascript
jQuery简单自定义图片轮播插件及用法示例
2016/11/21 Javascript
使用socket.io实现简单聊天室案例
2018/01/02 Javascript
纯js代码生成可搜索选择下拉列表的实例
2018/01/11 Javascript
nodejs中Express与Koa2对比分析
2018/02/06 NodeJs
jQuery pjax 应用简单示例
2018/09/20 jQuery
详解微信小程序中组件通讯
2018/10/30 Javascript
jQuery实现网页拼图游戏
2020/04/22 jQuery
js防抖和节流的深入讲解
2018/12/06 Javascript
浅析Vue中拆分视图层代码的5点建议
2019/08/15 Javascript
vue实践---根据不同环境,自动转换请求的url地址操作
2020/09/21 Javascript
wxpython 学习笔记 第一天
2009/03/16 Python
Fabric 应用案例
2016/08/28 Python
Python scikit-learn 做线性回归的示例代码
2017/11/01 Python
python中sort和sorted排序的实例方法
2019/08/26 Python
Python3.x+迅雷x 自动下载高分电影的实现方法
2020/01/12 Python
基于python SMTP实现自动发送邮件教程解析
2020/06/02 Python
HTML5地理定位实例
2014/10/15 HTML / CSS
Wiggle美国:英国骑行、跑步、游泳、铁人三项商店
2018/10/27 全球购物
android面试问题与答案
2016/12/27 面试题
.net笔试题
2014/03/03 面试题
几个Linux面试题笔试题
2012/12/01 面试题
活动总结新闻稿
2014/08/30 职场文书
全陪导游词
2015/02/04 职场文书
中学后勤工作总结2015
2015/07/22 职场文书
浅谈Python响应式类库RxPy
2021/06/14 Python
用Python可视化新冠疫情数据
2022/01/18 Python