Android 颤振webview截取并向所有请求添加标题
使用webview_颤振包,我可以加载我的网站并将会话cookie添加到初始URLAndroid 颤振webview截取并向所有请求添加标题,android,flutter,webview,interceptor,Android,Flutter,Webview,Interceptor,使用webview_颤振包,我可以加载我的网站并将会话cookie添加到初始URL _controller.future.then((controller) { _webViewController = controller; Map<String, String> header = {'Cookie': 'ci_session=${widget.sessionId}'}; _webViewController.loadUrl('https://xxxx.com', he
_controller.future.then((controller) {
_webViewController = controller;
Map<String, String> header = {'Cookie': 'ci_session=${widget.sessionId}'};
_webViewController.loadUrl('https://xxxx.com', headers: header);
});
\u控制器。未来。然后((控制器){
_webViewController=控制器;
映射头={'Cookie':'ci_session=${widget.sessionId}};
_webViewController.loadUrl('https://xxxx.com,标题:标题);
});
为了保持会话继续,我需要为所有请求添加相同的头,而不仅仅是初始请求。
有没有办法截获所有请求并通过添加头来修改它们
我找到的最接近的东西是navigationDelegate
,但它只返回一个NavigationDecision
,这在我的情况下是没有用的。你可以使用我的插件,它是一个flatter插件,允许你添加内联网络视图或打开应用程序内浏览器窗口,并且有很多事件、方法和选项来控制网络视图
如果需要为每个请求添加自定义头,可以使用shouldOverrideUrlLoading
事件(需要使用useShouldOverrideUrlLoading:true
选项启用它)
相反,如果您需要将cookie添加到Web视图中,您可以使用CookieManager
类(CookieManager.setCookie
方法来设置cookie)
下面是一个在WebView中设置cookie(名为ci_session
)并为每个请求设置自定义头(名为My custom header
)的示例:
导入'dart:async';
导入“dart:io”;
进口“包装:颤振/材料.省道”;
导入“包:flatter_inappwebview/flatter_inappwebview.dart”;
Future main()异步{
WidgetsFlutterBinding.ensureInitialized();
runApp(MyApp());
}
类MyApp扩展了StatefulWidget{
@凌驾
_MyAppState createState()=>new_MyAppState();
}
类MyAppState扩展了状态{
inappwebview控制器webView;
CookieManager _CookieManager=CookieManager.instance();
@凌驾
void initState(){
super.initState();
_cookieManager.setCookie(
url:“https://github.com/",
名称:“ci_会话”,
值:“54th5hfdcfg34”,
域名:“.github.com”,
是的,
);
}
@凌驾
无效处置(){
super.dispose();
}
@凌驾
小部件构建(构建上下文){
返回材料PP(
家:脚手架(
appBar:appBar(
标题:const Text('InAppWebView示例'),
),
主体:容器(
子项:列(子项:[
扩大(
子:InAppWebView(
初始URL:“https://github.com/",
initialHeaders:{'My-Custom-Header':'Custom_value=564hgf34'},
initialOptions:InAppWebViewGroupOptions(
跨平台:InAppWebViewOptions(
debuggingEnabled:true,
useShouldOverrideUrlLoading:true
),
),
onWebViewCreated:(InAppWebViewController){
网络视图=控制器;
},
onLoadStart:(InAppWebViewController控制器,字符串url){},
onLoadStop:(InAppWebViewController控制器,字符串url)异步{
列出cookies=wait\u cookieManager.getCookies(url:url);
cookies.forEach((cookie){
打印(cookie.name+“”+cookie.value);
});
},
shouldOverrideUrlLoading:(控制器,shouldOverrideUrlAlloadingRequest)异步{
打印(“URL:${shouldOverrideEurlloadingRequest.URL}”);
if(Platform.isAndroid | | shouldOverrideUrloadingRequest.iosWKNavigationType==iosWKNavigationType.LINK|已激活){
controller.loadUrl(url:shouldOverrideUrloadingRequest.url,标题:{
“我的自定义标题”:“自定义值=564hgf34”
});
return ShouldOverrideUrlLoadingAction.CANCEL;
}
return ShouldOverrideUrlLoadingAction.ALLOW;
},
))
])),
),
);
}
}
尽管还有其他一些问题,我还是使用了它。无论如何,我都要把它标记为正确答案。对于与插件相关的任何其他错误/问题,你可以在问题部分发布它们。你是否找到了webview\u Flatter软件包的解决方案