如果要更改请求头,您可以使用哈希映射并添加头部键值对。
原始答案:Original Answer
WebView web = findViewById(R.id.webView);
private Map<String, String> getHeaders() {
Map <String, String> extraHeaders = new HashMap<String, String>();
extraHeaders.put("Authorization", "Bearer");
return headers;
}
private WebViewClient getWebViewClient() {
return new WebViewClient() {
@Override
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
view.loadUrl(request.getUrl().toString(), getHeaders());
return true;
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url, getHeaders());
return true;
}
};
}
将WebViewClient添加到您的WebView中:
web.setWebViewClient(getWebViewClient());
webView = (WebView) findViewById(R.id.webView);
progressBar = (ProgressBar) findViewById(R.id.progressBar);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebChromeClient(new WebChromeClient() {
public void onProgressChanged(WebView view, int progress) {
progressBar.setProgress(progress);
if (progress == 100) {
progressBar.setVisibility(View.GONE);
}
}
});
HashMap<String, String> headers=new HashMap<>();
webView.loadUrl("https://stackoverflow.com",headers);
您可以使用以下方法向Webview提供额外的HTTP头信息:
public void loadUrl (String url, Map additionalHttpHeaders)
additionalHttpHeaders Map: 将要用于此URL的HTTP请求的附加标头,指定为从名称到值的映射。请注意,如果此映射包含任何由此WebView默认设置的标头,例如控制缓存、接受类型或用户代理的标头,则它们的值可能会被此WebView的默认值覆盖。
在您的情况下,原点被Webview默认的HTTP头信息所覆盖。
WebViewClient
并覆盖shouldInterceptRequest()
方法。如果您的API目标版本为21或更高版本,这个方法将会...override fun shouldInterceptRequest(view: WebView, request: WebResourceRequest): WebResourceResponse?
在内部,您将打开一个HTTPS连接:
val requestUrl = request.url!!.toString()
val httpsUrl = URL(requestUrl)
val conn: HttpsURLConnection = httpsUrl.openConnection() as HttpsURLConnection
for ((key, value) in request.requestHeaders) {
conn.addRequestProperty(key, value)
}
现在你有机会添加新的头部或修改现有的头部,例如:
conn.setRequestProperty("ORIGIN", "https://stackoverflow.com")
当您的请求准备就绪后,您可以将结果封装在一个新的WebResourceResponse中:
return WebResourceResponse(
conn.contentType.substringBefore(";"),
conn.contentType.substringAfter("charset=", "UTF-8"),
conn.inputStream)