该篇内容由个人博客点击跳转同步更新!转载请注明出处!
前言
最近有一个需求需要频繁调用xx接口,但这个接口调用次数一多就会给你禁掉,而且一禁就是禁一天的那种,只能通过界面模拟用户操作抓取数据包,然后单独对这些数据包进行处理
具体步骤
首先看下需要格式化的数据包长什么样
![](https://img.haomeiwen.com/i8084902/df6f97eff15e4da5.png)
这就是完整的一个数据包,网上基本都是格式化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的对应方法进行获取
微信关注我哦!(转载注明出处)
关注我哦
网友评论