2013-10-30 10 views
6

Come posso intercettare tutte le richieste effettuate da un Android WebView e ottenere le intestazioni di richiesta corrispondenti? Voglio vedere le intestazioni per ogni richiesta fatta dal mio WebView inclusi XHR, fonti di script, css, ecc.Come vedo le intestazioni delle richieste sulle richieste di Android WebView?

L'equivalente su iOS è di ignorare NSURLCache che ti darà tutte queste informazioni. Di seguito sono probabilmente il più vicino a quello che voglio, ma per quanto posso vedere WebViewClient sempre e solo ci restituisce stringhe:

void onLoadResource(WebView view, String url); 
WebResourceResponse shouldInterceptRequest(WebView view, String url); 
+0

La lettura delle intestazioni della richiesta non è possibile con Android 'WebView' o' WebViewClient', afaik. Ho risolto questo problema utilizzando un proxy leggero. – acj

+0

@acj - hai fatto un proxy a livello di codice su 'WebView' o esterno (router/livello di rete)? –

+0

Lo configuro nelle reti mobili nelle impostazioni del dispositivo. Un'altra opzione: se ho solo bisogno di un metodo rapido e sporco per controllare le intestazioni, avvierò un'istanza di netcat ('nc') sul mio portatile e collegherò il' WebView' all'istanza di netcat. – acj

risposta

3

Si domanda suona molto simile a this one, quindi la risposta immediata e inequivocabile è che esso non è possibile leggere le intestazioni delle richieste su WebView o WebViewClient di Android.

Esistono soluzioni alternative che potrebbero consentire di ottenere ciò di cui si ha bisogno. This answer descrive in modo più dettagliato come farlo.

1

Con this way è possibile attivare il debug per l'applicazione vista web e l'utilizzo di Chrome Developer Tools per vedere tutti i dettagli delle vostre richieste, le risposte, CSS, JavaScript, ecc

3
webview.setWebViewClient(new WebViewClient() { 
      @SuppressLint("NewApi") 
      @Override 
      public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { 
       Log.d("", "request.getRequestHeaders()::"+request.getRequestHeaders()); 

       return null; 
      } 
     }); 
1

Ho anche avuto alcuni problemi con l'intercettazione intestazioni di richiesta in WebView myWebView.

Prima ho provato a farlo con l'impostazione personalizzata WebViewClient per myWebView.

myWebView.setWebViewClient(new WebViewClient() { 

    @Override 
      @TargetApi(Build.VERSION_CODES.LOLLIPOP) 
      public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { 
       Log.v("USERAGENTBROWSE", "shouldOverrideUrlLoading api >= 21 called"); 

       //some code 

       return true; 
      } 

    @Override 
      public boolean shouldOverrideUrlLoading(WebView view, String url) { 
       Log.v("USERAGENTBROWSE", "shouldOverrideUrlLoading api < 21 called"); 

       //some code 

       return true; 
      } 

}); 

Ma il metodo shouldOverrideUrlLoading(...) non è mai stato chiamato. E non ho davvero idee sul perché.

Poi ho scoperto che c'è il modo di intercettare alcune intestazioni comuni, come "User-Agent", "Cache-Control", ecc .:

myWebView.getSettings().setUserAgentString("your_custom_user_agent_header"); 
myWebView.getSettings().setCacheMode(int mode); 
... 

Spero che possa aiutare qualcuno.

Problemi correlati