gpt4 book ai didi

Android WebView 有时不会在初始页面加载时发送请求 header

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:41:18 25 4
gpt4 key购买 nike

我有一个 webview Activity ,它在其 onCreate() 方法中加载一个带有一些自定义请求 header 的 URL。要求是通过初始 URL 请求传递自定义 header 。在一些设备上,webview Activity 启动几次后,webview 停止发送 header 。

例如,我有一个启动 WebViewActivity 的 HomeActivity。在启动 WebViewActivity 并导航回 HomeActivity 几次后,WebViewActivity 停止发送自定义请求 header 并且此行为不会改变,除非我清除应用程序的数据。

我已经使用 MITM 工具确认了此行为。实现如下:

@Override
protected void onCreate(Bundle savedInstanceState) {

Map<String, String> map = new HashMap<>();
map.put("header1", "header1_value");
map.put("header2", "header2_value");
map.put("header3", "header3_value");
map.put("header4", "header4_value");
webView.loadUrl("https://www.example.com/mypath", map);

}

以上代码段在每次 Activity 启动时无条件执行。但是, header 不存在于 webview 发出的实际请求中。此外,请求的页面是 303 重定向。

最佳答案

如果您的最低 API 目标是级别 21,您可以使用 shouldInterceptRequest否则你可以使用 this

每次拦截,您都需要获取 url,自己发出此请求,并返回内容流:

然后:

WebViewClient wvc = new WebViewClient() {
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, String url) {

try {
DefaultHttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url);
httpGet.setHeader("header1", "header1_value");
httpGet.setHeader("header2", "header2_value");
httpGet.setHeader("header3", "header3_value");
httpGet.setHeader("header4", "header4_value");
HttpResponse httpReponse = client.execute(httpGet);

Header contentType = httpReponse.getEntity().getContentType();
Header encoding = httpReponse.getEntity().getContentEncoding();
InputStream responseInputStream = httpReponse.getEntity().getContent();

String contentTypeValue = null;
String encodingValue = null;
if (contentType != null) {
contentTypeValue = contentType.getValue();
}
if (encoding != null) {
encodingValue = encoding.getValue();
}
return new WebResourceResponse(contentTypeValue, encodingValue, responseInputStream);
} catch (ClientProtocolException e) {
//return null to tell WebView we failed to fetch it WebView should try again.
return null;
} catch (IOException e) {
//return null to tell WebView we failed to fetch it WebView should try again.
return null;
}
}
}

//Where wv is your webview
wv.setWebViewClient(wvc);

基于此question

关于Android WebView 有时不会在初始页面加载时发送请求 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54868993/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com