已知REST API的POST接口URL,如何获取其完整请求体参数?
答案
不存在通用方法能仅靠已知POST接口URL,就通过Postman类工具直接获取完整的带类型、默认值标记的请求体参数定义,能不能拿到完全取决于目标API的服务端有没有主动暴露相关描述信息。
可尝试的探测路径(仅对部分API生效)
- 优先探测自描述规范端点
绝大多数标准化的REST API会用OpenAPI(原Swagger)维护接口文档,你可以尝试在同域名下访问常见的规范路径,比如/openapi.json、/swagger/v1/swagger.json、/api-docs,如果能拿到对应的JSON规范文件,直接导入Postman就能看到所有接口的完整参数定义,包含字段类型、是否必填、默认值、取值约束,和你举例的结构完全一致。 - 发送OPTIONS方法请求
给目标URL发OPTIONS请求,部分严格遵循REST规范的服务会在响应里返回接口支持的方法、参数约束,但90%以上的生产API只会在OPTIONS响应里返回跨域头信息,不会携带完整的请求体参数说明。 - 通过报错反馈逆向推导
给接口发空请求体、或者携带非法格式参数的POST请求,部分服务会在400类报错的响应内容里明确提示缺失的必填字段、不支持的非法字段,你可以通过多次试探逐步拼凑参数列表。但这种方式效率极低,也拿不到准确的字段类型、可选字段默认值等信息,很容易遗漏非必填参数。
无效场景说明
如果目标API没有接入自描述规范、报错信息做了统一模糊处理(比如仅返回"请求参数错误"不提示具体字段),你没有任何办法通过工具探测拿到完整参数表,只能通过抓包官方控制台/客户端的正常请求、逆向前端交互逻辑、找官方非公开文档的方式获取参数信息。
针对你举例的资源创建接口:
https://cloud.app.com/api/vx/accounts/account_id/projects/project_id/resource/
你不可能在服务端不配合的情况下,一次性获取到如下格式的完整结构化参数定义:
{ "id": int, "account_id": int, "project_id": int, "resource_name": str, "resource_type": str, "state": null, "threads": optional[int] #default= 4, }
所有声称能自动扫描出任意REST API完整参数的工具,本质都是基于上述几种路径做探测,没有通用的魔法能力。
内容的提问来源于stack exchange,提问作者Olivier Thierie
相关产品推荐
相关产品推荐

