Цель:
Отменить все запросы, сделанные WebView, и сделать запрос самостоятельно (в конечном итоге настроить прокси).
Код:
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
if (url == null || url.trim().equals(""))
return null;
final DefaultHttpClient httpClient = new DefaultHttpClient();
httpClient.getConnectionManager().closeExpiredConnections();
final HttpUriRequest httpRequest = new HttpGet(url);
try {
final HttpResponse response = httpClient.execute(httpRequest);
final Header[] headers = response.getHeaders(CONTENT_TYPE);
String mimeType = "";
String encoding = "";
if (headers != null && headers.length > 0) {
final String type = headers[0].getValue();
final int semicolonIndex = type.indexOf(';');
if (semicolonIndex != -1) {
mimeType = type.substring(0, semicolonIndex).trim();
encoding = type.substring(semicolonIndex + 1).trim();
final int equalsIndex = encoding.indexOf('=');
if (equalsIndex != -1)
encoding = encoding.substring(equalsIndex + 1).trim();
} else
mimeType = type;
}
return new WebResourceResponse(mimeType, encoding, response.getEntity().getContent());
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} finally {
httpClient.getConnectionManager().closeExpiredConnections();
}
return null;
}
Все запросы, похоже, проходят нормально, но в итоге я получаю трассировку стека с одной из двух следующих проблем:
3 15:07:28.650 E/InputDispatcher( 3981): channel '40d76268 com.secure.browser/com.secure.browser.SecureBrowserActivity (server)' ~ Consumer closed input channel or an error occurred. events=0x8
01-03 15:07:28.650 E/InputDispatcher( 3981): channel '40d76268 com.secure.browser/com.secure.browser.SecureBrowserActivity (server)' ~ Channel is unrecoverably broken and will be disposed!
что, по-видимому, указывает на то, что в операционной системе заканчиваются файловые дескрипторы (fid)
or
01-03 15:29:36.810 I/DEBUG ( 5798): 5903cd34 ac81c0b7 /system/lib/libdvm.so
01-03 15:29:38.380 I/DEBUG ( 5798): debuggerd committing suicide to free the zombie!
01-03 15:29:38.380 I/BootReceiver( 3981): Copying /data/tombstones/tombstone_07 to DropBox
(СИСТЕМА_TOMBSTONE)
Это означает, что я думаю, это означает, что ОС сталкивается с проблемами низкого уровня.
Я использую 3.0+, поэтому функция должна поддерживаться.
Это в основном терпит неудачу, когда я включаю javascript или после просмотра некоторое время без javascript.
e.getSuppressed()
во все. затем повторно запустите код и ответьте, если он сработал. а также ответьте, используете ли выWAKE_LOCK
или нет. - person exploitr   schedule 24.05.2018