react-native 文档里面有设置webview 头部信息的写法如下
可是设置了根本不起作用,不知道有没有小伙伴遇到过同样的问题,找了好多资料都没有作用,最终各种尝试下终于解决这个问题。
1、首先要研究一下webview的header从哪里来?
webview创建连接的时候服务器会返回一个session cookies,如图,
cookie
安卓里面有一个CookieManager单例类,用来存储和管理cookie的,在WebView创建连接之前,会通过CookieManager.getInstance().getCookie(url); 先获取到这个cookie,然后保存到本地,存储路径如下
webview创建连接的时候会先判断本地的这个cookie是否存在,如果存在再拿到这个cookie作为头部创建连接,然后我们自己创建的header就不起作用了。
解决方法如下:
1、在进入webview页面的时候我们手动检查一下本地是否存在url的cookie,可以使用react-native-CookieManager第三方库:
2、 构建自己的header,上面打印的cookie值,OAOP_JSESSIONID=1365F51FBA11A8AFAC7D1536D3C501CD
这个sessionID作为我们作为自己的header里的一部分,一定不能替换成自己的,这个很重要,我试着把它换成别的结果连接失败。
拿到这个以后去构建自己的header,比如我自己创建的header
header = {
'cookie':OAOP_JSESSIONID=1365F51FBA11A8AFAC7D1536D3C501CD;TOKEN=123KFJSDK;
}
3、删除本地的cookie,我是直接删除了所有的cookie
CookieManager.removeAllCookies()
4、创建连接,就是让组件显示webview
this.setState({
showWebview:true;
})
render(){
return( this.state.showWebview ?
( <WebView
source={{
uri:link,
headers:header(自己构建的) }} /> ) : null
)}
5、这个时候webview再从本地找cookie就找不到了,因为我们已经把它删除了,就能用我们自定义的headerl