Flutter中使用flutter_inappwebview如何获取跳转后POST请求的响应参数
flutter_inappwebview获取POST导航请求响应参数说明
支持情况说明
该需求完全被flutter_inappwebview库支持,5.0.0及以上的稳定版本都提供了原生的回调能力可以直接获取包括POST在内的所有请求响应参数。
具体实现方式
你可以通过InAppWebView组件提供的onLoadResourceResponse回调实现需求,该回调会在WebView触发任何资源加载请求完成后触发,实现步骤如下:
- 优先过滤页面主导航请求:通过
response.resourceType == ResourceType.MAIN_FRAME条件,筛选出用户页面跳转对应的主请求,排除静态资源、异步接口等其他请求 - 过滤POST请求:通过
response.request?.method == "POST"条件,只匹配你需要的POST请求 - 直接读取响应参数:回调返回的
response对象包含你需要的所有响应信息:- 响应头:
response.headers,返回Map格式的键值对 - 响应状态码:
response.statusCode - 响应内容长度:
response.contentLength - 响应MIME类型:
response.contentType
- 响应头:
示例代码
InAppWebView( initialUrlRequest: URLRequest(url: WebUri("https://你的目标页面地址")), onLoadResourceResponse: (controller, response) async { // 筛选页面跳转的POST请求 if (response.resourceType == ResourceType.MAIN_FRAME && response.request?.method == "POST") { // 读取响应头 Map<String, String>? respHeaders = response.headers; // 读取状态码 int? respStatusCode = response.statusCode; // 此处添加你的业务逻辑 print("页面跳转POST响应头:$respHeaders"); print("页面跳转POST响应状态码:$respStatusCode"); } }, )
额外注意事项
- 如果你需要获取POST请求的响应体内容,需要先在
InAppWebViewSettings中开启useOnLoadResourceResponseWithBody: true配置,再通过onLoadResourceResponseWithBody回调即可拿到响应体的字节数据 - Android 7.0以下系统对POST请求的响应捕获存在部分系统级限制,建议在Android 7.0及以上版本使用该功能
- 如果你需要捕获WebView内部发起的异步POST接口请求而非页面跳转的主请求,去掉
ResourceType.MAIN_FRAME的过滤条件即可
内容的提问来源于stack exchange,提问作者Cosmin Vacaru
相关产品推荐
相关产品推荐

