gpt4 book ai didi

android - 在 WebView 中拦截 POST 请求

转载 作者:IT老高 更新时间:2023-10-28 21:53:04 26 4
gpt4 key购买 nike

我正在开发一个过滤请求(带有白名单)并使用自定义 SSLSocketFactory 的 Android 应用程序。为此,我开发了一个自定义 WebViewClient 并重写了 shouldInterceptRequest 方法。我可以过滤和使用我的 SocketFactory 与 GET 请求,但我无法拦截 POST 请求。

那么,有没有办法在 WebView 中拦截 POST 请求?

这里是 shouldInterceptRequest 方法的代码:

public final WebResourceResponse shouldInterceptRequest(WebView view, String urlStr) {
URI uri = URI.create(urlStr);
String scheme = uri.getScheme();
// If scheme not http(s), let the default webview manage it
if(!"http".equals(scheme) && !"https".equals(scheme)) {
return null;
}
URL url = uri.toURL();

if(doCancelRequest(url)) {
// Empty response
Log.d(TAG, "URL filtered: " + url);
return new WebResourceResponse("text/plain", "UTF-8", new EmptyInputStream());

} else {
Log.d(TAG, "URL: " + url);

HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestProperty("User-Agent", mSettings.getUserAgentString());

// Configure connections
configureConnection(conn);

String mimeType = conn.getContentType();
String encoding = conn.getContentEncoding();

if(mimeType != null && mimeType.contains(CONTENT_TYPE_SPLIT)) {
String[] split = mimeType.split(CONTENT_TYPE_SPLIT);
mimeType = split[0];

Matcher matcher = CONTENT_TYPE_PATTERN.matcher(split[1]);
if(matcher.find()) {
encoding = matcher.group(1);
}
}

InputStream is = conn.getInputStream();
return new WebResourceResponse(mimeType, encoding, is);
}
}

最佳答案

几天前我遇到了同样的问题。

所以我建立了一个库来解决它:

https://github.com/KonstantinSchubert/request_data_webviewclient

它是一个带有自定义 WebResourceRequest 的 WebViewClient,其中包含 XMLHttpRequest 请求的 POST/PUT/... 负载。

它只适用于这些 - 不适用于表单和其他类型的请求来源。

黑客的工作原理基本上是通过将脚本注入(inject) HTML 来拦截 XMLHttpRequest 调用。它记录 post/put/... 内容并将其发送到 android.webkit.JavascriptInterface。在那里,请求被隐藏,直到 Android 调用 shouldInterceptRequest 方法...

关于android - 在 WebView 中拦截 POST 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13954049/

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