通过百度 OCR 工具识别 rap2 登录中的验证码,从而实现登录~那我们今天来实战解析 rap2 的接口数据,生成我们所需要的接口数据

1、我们先通过 F12 看看哪个接口是我们需要的?对~就是你了!

 

 

2、将接口数据复制到https://www.json.cn/,我们来看看接口数据结构,看看有哪些信息是需要的

 

 

 

 

3、通过分析 properties 中的数据,发现 pos=1 为请求头,pos=2 为路径参数,pos=3 为 body 参数,name 为字段名,value 为字段值,parentId=1,没有父节点;parentId!=-1,为父节点

 

 

 

 

上一期中,有小伙伴反馈说,可以输入 cookies 不?那这次优化一下吧~

实现 rap2 登录并获取数据

  1. @classmethod
  2. def rap_data(cls, id, cookies = None):
  3. """
  4. 获取接口文档数据
  5. :param id: 接口文档id
  6. :param cookies: 非必填,登录的cookies
  7. :return: 返回json数据
  8. """
  9. params = {"id": id}
  10. if cookies:
  11. try:
  12. cls.cookies = dict([i.split("=", 1) for i in cookies.split("; ")])
  13. except Exception as e:
  14. raise Exception('cookies格式不对,请重新输入!')
  15. try:
  16. res = requests.get(url=UrlConfig.RAP_PROJRCT_URL, params=params, cookies=cls.cookies).json()
  17. except Exception as e:
  18. raise Exception('cookies过期了,请重新输入!')
  19. return res
  20. else:
  21. login_result = False
  22. #判断是否登录成功
  23. while not login_result:
  24. login_result = Rap2Data.rap_login()
  25. res = requests.get(url=UrlConfig.RAP_PROJRCT_URL, params=params, cookies=cls.cookies).json()
  26. return res

解析关键代码展示:执行主入口

  1. class Rap2Parse(object):
  2. @classmethod
  3. def api_data(cls, id, cookies=None, module=None):
  4. json_obj = Rap2Data.rap_data(id, cookies)
  5. errMsg = json_obj.get("errMsg")
  6. #获取报错信息,将其抛出(权限不足、不存在接口文档,接口都会返回errMsg)
  7. if errMsg:
  8. errMsg = errMsg + f"请将接口文档授权给{Account.RAP['email']}!"
  9. raise Exception(errMsg)
  10. if module is None:
  11. #模块名不传的话,默认获取所有模块数据
  12. json_list = json_obj['data']['modules']
  13. else:
  14. #模块名传入,获取对应的模块数据
  15. json_list = jsonpath(json_obj, f"$.data.modules[?(@.name=='{module}')]")
  16. #校验传入的模块名是否存在
  17. if not json_list:
  18. raise Exception(f"{module}模块名不存在")
  19. # 接口文档标题名,作为后续的文件名
  20. file_name = json_obj.get('data').get('name')
  21. #对标题名特殊处理
  22. special_str = r"[\/\\\:\*\?\"\<\>\|]"
  23. file_name = re.sub(special_str, "-", file_name)
  24. data = []
  25. #遍历模块数据
  26. for i in json_list:
  27. modules_data = {}
  28. #模块名
  29. modules_data['modules'] = i['name']
  30. #模块描述
  31. modules_data['description'] = i['description']
  32. interfaces = []
  33. #遍历interfaces接口数据
  34. for i, dto in enumerate(i['interfaces']):
  35. cases_data = {}
  36. #接口id
  37. cases_data['api_id'] = i + 1
  38. #接口名
  39. cases_data['title'] = dto['name']
  40. #接口描述
  41. cases_data['description'] = dto['description']
  42. #接口路径
  43. cases_data['url'] = dto['url']
  44. #接口请求方法
  45. cases_data['method'] = dto['method']
  46. #获取接口的入参和出参
  47. properties_list = jsonpath(dto
版权声明:本文为tiechui2015原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/tiechui2015/p/15189934.html