如何通过API URL识别接口支持的HTTP方法并查找POST请求
针对从API地址识别支持的HTTP方法、定位POST接口的可行方案
首先明确:不存在仅靠URL字符串解析就能100%准确判定接口支持HTTP方法的方案,HTTP方法是服务端路由层配置的规则,没有对外暴露的话没法直接从路径读出来。你提到的api.apithing.com/<method call>这类路径传参的RPC风格接口,很多不会严格遵循RESTful规范,更没法靠路径特征直接猜,但有几套实操性很强的落地方法,完全能满足你定位POST请求的需求:
- 优先发OPTIONS预检请求
HTTP协议原生定义了OPTIONS方法用于查询目标资源的支持能力,给目标接口地址发一个OPTIONS请求,合规实现的接口会在响应头的Allow字段里直接返回所有支持的HTTP方法,比如返回Allow: GET, POST, PUT, DELETE, OPTIONS就能直接确认该接口支持POST。要注意不少非标准实现的接口会禁用OPTIONS请求,或者返回的Allow字段内容不准,这种情况就用下一种方法验证。 - 直接构造POST请求做状态码判定
既然你的核心需求是找POST接口,不需要全量枚举所有方法,直接给目标路径发一个空的POST请求即可:- 如果响应返回的是400参数错误、401未鉴权、403权限不足这类业务层报错,不是
405 Method Not Allowed,就可以确定该路径支持POST方法,后续补参数、补鉴权调通就行 - 如果返回405状态码,响应头一般也会携带
Allow字段标注实际支持的方法,直接排除这个路径即可 - 测试的时候注意控制请求频率,不要高并发扫,不然容易被WAF识别为攻击拦截IP
- 如果响应返回的是400参数错误、401未鉴权、403权限不足这类业务层报错,不是
- 优先匹配公开的接口定义文件
如果是对外提供服务的公开API,可以先尝试访问同域名下的/openapi.json、/swagger.json、/v2/api-docs这类常见的接口文档路径,拿到的OpenAPI/Swagger格式定义文件里会明确标注每个路径支持的HTTP方法,找POST类型接口的准确率100%,比盲测效率高很多。
注意:不要靠URL路径名猜方法,比如看到路径带
add/create就默认是POST,很多存量老接口的路由配置非常随意,用GET做写操作的情况非常普遍,所有判定都要以实际请求的响应结果为准。
内容的提问来源于stack exchange,提问作者Zach
相关产品推荐
相关产品推荐

