2013-10-30 109 views
6

如何攔截Android WebView所有請求並獲取相應的請求標頭?我希望看到我的WebView包括XHR,腳本來源,css等發出的每個請求的標頭。如何在Android WebView請求上查看請求標頭?

iOS上的等效項是覆蓋NSURLCache,它將爲您提供所有這些信息。以下是可能是最接近我想要的,但據我可以看到WebViewClient永遠只給了我們回到字符串:

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

使用Android的「WebView」或「WebViewClient」afaik讀取請求標頭是不可能的。我使用輕量級代理解決了這個問題。 – acj

+0

@acj - 你是否在'WebView'或外部(路由器/網絡級別)上以編程方式執行代理? –

+0

我在設備設置中的移動網絡中進行配置。另一種選擇:如果我只需要一個快速而又髒的方法來檢查標題,我將在筆記本電腦上啓動一個netcat('nc')實例,並將'WebView'連接到netcat實例。 – acj

回答

3

你的問題聽起來很相似,this one,所以直接和明確的答案是它無法讀取Android WebView或WebViewClient上的請求標頭。

但有一些解決方法可以讓您獲得所需的解決方案。 This answer更詳細地描述瞭如何做到這一點。

1

通過this way您可以啓用Web視圖應用程序的調試和使用Chrome開發者工具查看您的請求,響應,CSS,JavaScript的全部細節,等

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

       return null; 
      } 
     }); 
1

我也有一些問題,攔截請求頭在WebView myWebView

首先,我嘗試通過爲myWebView設置自定義WebViewClient來做到這一點。

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

}); 

但方法shouldOverrideUrlLoading(...)從未被調用過。我真的不知道爲什麼。

後來我發現,有攔截一些常見的頭象"User-Agent""Cache-Control"方式等:

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

希望它可以幫助別人。