2016-06-15 18 views
6

Desidero aggiungere intestazioni personalizzate alle richieste nella visualizzazione Web. Penso che dovrebbe essere possibile farlo in shouldInterceptRequest .. Poiché il mio livello API minimo è inferiore a 21 shouldInterceptRequest (vista finale WebView, URL stringa finale) viene anche chiamato e quindi ho bisogno di aggiungere anche qui le intestazioni, ma non sono sicuro Come.Aggiunta di intestazione personalizzata a tutte le richieste in shouldInterceptRequest Visualizzazione Web 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); 
    } 

v'è il suggerimento di usare view.loadUrl (URL, le intestazioni), ma questo non funziona neanche.

risposta

0

La difficoltà che si incontra con la pre API 21 è la dovrebbe shouldInterceptRequest fornisce solo l'URL intercettato e la webview senza il corpo della richiesta. Mi sono imbattuto in questo stesso problema e ho scoperto il seguente repository GitHub

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

La parte importante di questo progetto è interceptheader.html nella cartella asset. Questo html contiene javascript che viene inserito all'inizio di ogni risposta HTML caricata dalla webview. Questo JS intercetta ogni invio di form e ajax dalla pagina e carica i dati del corpo in una classe java. Successivamente il metodo shouldInterceptRequest determina se la richiesta è POST o GET (si ottengono purtroppo solo quei due) in base alla presenza o meno di dati nel corpo.

Infine, una volta che ha eseguito il marshalling di tutte le informazioni rilevanti, esegue la richiesta da sola (invece di passarla ad Android), restituendo la risultante WebResourceResponse.

State attenti che il repository ha visto un po 'di invecchiamento. Dovevo fare un po 'di giocherellare per far funzionare le pagine come volevo.

Il posto migliore per aggiungere le intestazioni è nella classe InterceptingWebViewClient in shouldInterceptRequest.

conn.setRequestProperty("header-name", value); 
Problemi correlati