Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 颤振webview截取并向所有请求添加标题_Android_Flutter_Webview_Interceptor - Fatal编程技术网

Android 颤振webview截取并向所有请求添加标题

Android 颤振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

使用webview_颤振包,我可以加载我的网站并将会话cookie添加到初始URL

_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软件包的解决方案