2016-06-15 26 views
6

Chcę dodać niestandardowe nagłówki do żądań w widoku internetowym. Myślę, że powinno być możliwe zrobienie tego w shouldInterceptRequest .. Ponieważ mój minimalny poziom API jest mniejszy niż 21 shouldInterceptRequest (ostateczny widok WebView, końcowy URL typu String) jest również wywoływany i dlatego muszę dodać tutaj także nagłówki, ale nie jestem pewien w jaki sposób.Dodawanie niestandardowego nagłówka do wszystkich żądań w witrynie shouldInterceptRequest Android

@Override 
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
      request.getRequestHeaders().put("ClientId", "ANDROID"); 
      request.getRequestHeaders().put("Tokon", token); 
     } 

     return super.shouldInterceptRequest(view, request); 
    } 

    @Override 
    public WebResourceResponse shouldInterceptRequest(final WebView view, final String url) { 
     // I need to updated the header here 

     return super.shouldInterceptRequest(view, url); 
    } 

Jest propozycja, aby korzystać view.loadUrl (URL, nagłówki), ale to nie działa albo.

Odpowiedz

0

Trudność napotkana przy pomocy interfejsu API przed 21 jest fakt, że funkcjaInterceptRequest udostępnia przechwycony adres URL i widok internetowy bez treści żądania. Pobiegłem do tej samej kwestii i odkrył następujące GitHub repozytorium

https://github.com/KeejOow/android-post-webview

Ważną częścią projektu jest interceptheader.html w folderze aktywów. Ten html zawiera javascript, który jest wstawiany u góry każdej odpowiedzi HTML ładowanej przez przeglądarkę. Ten JS przechwytuje wszystkie formularze i zgłoszenia ajax ze strony i ładuje dane treści do klasy java. Następnie metoda shouldInterceptRequest określa, czy żądanie to POST, czy GET (otrzymujesz tylko te dwa, niestety) na podstawie tego, czy istnieją jakieś dane w treści.

W końcu, po zebraniu wszystkich istotnych informacji, wykonuje żądanie samodzielnie (zamiast przekazywania go do systemu Android), zwracając wynikową WebResourceResponse.

Należy pamiętać, że w repozytorium wystąpiło pewne starzenie się. Musiałem trochę skrzypić, aby strony działały tak, jak chciałem.

Najlepsze miejsce do dodania nagłówków znajduje się w klasie InterceptingWebViewClient w polu shouldInterceptRequest.

conn.setRequestProperty("header-name", value); 
Powiązane problemy