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

python基础

浏览数:808

2019-8-31

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

前言

最近有一个需求需要频繁调用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的对应方法进行获取

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

作者:邵佳楠