python解析http数据包_python如何解析HTTP返回的标准数据包

本文介绍如何使用Python的http.client库中的HTTPResponse方法解析包含头信息的数据包,避免简单通过JSON格式化,并提供代码示例进行详细说明。

该篇内容由个人博客点击跳转同步更新!转载请注明出处!

前言

最近有一个需求需要频繁调用xx接口,但这个接口调用次数一多就会给你禁掉,而且一禁就是禁一天的那种,只能通过界面模拟用户操作抓取数据包,然后单独对这些数据包进行处理

具体步骤

首先看下需要格式化的数据包长什么样

数据包

这就是完整的一个数据包,网上基本都是格式化json数据包的,但返回的内容中还包含了头信息等所以不能简单的通过json来格式化,另外头信息中可能还有需要用到的信息内容,不能通过正则直接把头信息给删除只保留下面body中的内容。

我们在这里主要用到了

http.client库中的

HTTPResponse方法来解析数据包内容,具体代码如下:

import os

from http.client import HTTPResponse

from io import BytesIO

#传给HTTPResponse一个模拟的makefile方法

class FakeSocket():

def __init__(self, response_stream):

self._file = BytesIO(response_stream)

def makefile(self, *args, **kwargs):

return self._file

#根据路径遍历出所有数据包文件,并返回对应的文件地址

def all_path(dirname):

result = []#所有的文件

for maindir, subdir, file_name_list in os.walk(dirname):

for filename in file_name_list:

apath = os.path.join(maindir, filename)#合并成一个完整路径

result.append(apath)

return result

#获取所有需要处理的文件

allfilespath=all_path("F:\\Temp\\线路结果")

for path in allfilespath:

try:

#HTTPResponse内部使用了iso-8859-1解码,所以这里也要写

with open(path,'r',encoding="iso-8859-1") as fo:

#获取文件内容

con=fo.read()

#HTTPResponse内部使用了iso-8859-1解码,所以这里也要写

source=FakeSocket(con.encode("iso-8859-1"))

response = HTTPResponse(source)

response.begin()

#获取body主体中的内容

result=response.read()

pass

except Exception as identifier:

pass

这样解析就完成了,想要获取头信息的话可以调用response的对应方法进行获取

微信关注我哦!(转载注明出处)

关注我哦

作者:邵佳楠

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值