2013-07-18 14 views
6

Moim zadaniem jest załadowanie strony internetowej w WebView przez HTTPS z nieobsługiwanym przez wanilię szyfrsem Android TLS. W tej chwili jako dowód koncepcji wdrożyłem klienta HTTP Apache zdolnego do wykonywania żądań HTTP do takich zasobów.WebView z niestandardowym klientem HTTP

Jakie jest najlepsze podejście, aby WebView używał mojej niestandardowej implementacji klienta do wykonywania wszystkich żądań sieciowych?

+0

Zaczynam myśleć, że to niemożliwe. Znalazłem 'WebViewClient.shouldInterceptRequest()', dzięki któremu mogę wysyłać żądania sieciowe do zasobów strony z moim własnym klientem http, ale ta metoda przekazuje tylko żądany adres URL bez powiązanych informacji żądania (metoda http GET/POST/..., nagłówki http itp.), więc nie można go używać do prawdziwego "proxy". – user882209

+1

Pamiętaj, że metoda żądania i nagłówki są dostępne od wersji Android 5.0 w nowej wersji 'shouldInterceptRequest' za pomocą [WebResourceRequest] (http://developer.android.com/reference/android/webkit/WebResourceRequest.html). – Stan

Odpowiedz

1

W rzeczywistości zaakceptowana odpowiedź jest błędna. Nie otrzymujesz pełnych informacji; czego brakuje, to ciała żądań.

Możesz więc zaimplementować żądania GET lub HEAD, ale prośby POST są trudniejsze.

Jeszcze nie widziałem dobrego rozwiązania. Jeden z nich, na który natknąłem się, wykorzystuje JavaScript wstawiony do strony w celu zebrania danych POST, przekazanie go do Javy poprzez powiązanie https://developer.android.com/guide/webapps/webview.html#BindingJavaScript, a następnie wykonuje żądanie w Javie.

Niestety, WebView spróbuje wykonać tę samą prośbę ponownie, więc trzeba dodać więcej hackery aby to działało.

Powiązane problemy