2013-10-30 6 views
6

Wie kann ich alle Anfragen abfangen, die aus einem Android WebView bestehen und die entsprechenden Anforderungsheader erhalten? Ich möchte die Header für jede Anfrage aus meiner WebView einschließlich XHRs, Skriptquellen, CSS, etc.Wie kann ich Anfragekopfzeilen in Android WebView-Anfragen sehen?

sehen Das Äquivalent auf iOS ist zu überschreiben NSURLCache, die Ihnen all diese Informationen geben wird. Im Folgenden sind wahrscheinlich die am nächsten zu dem, was ich will, aber so weit ich sehen kann WebViewClient immer nur gibt uns Strings zurück:

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

Das Lesen der Anfrage Header ist nicht möglich mit Android 'WebView' oder' WebViewClient', afaik. Ich habe dieses Problem mit einem Lightweight Proxy gelöst. – acj

+0

@acj - Haben Sie einen Proxy programmatisch auf dem 'WebView' oder extern (Router/Netzwerkebene) gemacht? –

+0

Ich konfiguriere es in Mobile Networks in den Geräteeinstellungen. Eine weitere Option: Wenn ich nur eine schnelle Methode zum Überprüfen der Header benötige, starte ich eine Instanz von netcat ('nc') auf meinem Laptop und verbinde die' WebView' mit der netcat-Instanz. – acj

Antwort

3

Sie Frage klingt sehr ähnlich this one, so dass die sofortige und eindeutige Antwort, dass ist es Es ist nicht möglich, die Anforderungsheader auf Android WebView oder WebViewClient zu lesen.

Es gibt jedoch Workarounds, mit denen Sie das bekommen können, was Sie brauchen. This answer beschreibt ausführlicher, wie dies zu tun ist.

1

von this way können Sie das Debuggen für Web-Ansicht Anwendung aktivieren und Developer Tools Chrome vollständige Informationen über Ihre Anfragen, Antworten, CSS, JavaScripts, um zu sehen, etc

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

       return null; 
      } 
     }); 
1

Ich hatte auch einige Probleme mit Request-Header Abfangen in WebView myWebView.

Zuerst habe ich versucht, dies mit der Einstellung benutzerdefinierte WebViewClient für myWebView zu tun.

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; 
      } 

}); 

Aber Methode shouldOverrideUrlLoading(...) wurde nie aufgerufen. Und ich habe wirklich keine Ideen warum.

Dann fand ich, dass es der richtige Weg ist einige gemeinsame Header wie "User-Agent", "Cache-Control", etc .:

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

Hoffnung abfangen es jemand helfen kann.

Verwandte Themen