2013-10-30 39 views
6

Làm cách nào để chặn tất cả các yêu cầu được tạo ra từ Android WebView và nhận các tiêu đề yêu cầu tương ứng? Tôi muốn xem các tiêu đề cho mọi yêu cầu được thực hiện từ WebView của tôi bao gồm XHR, nguồn tập lệnh, css, v.v.Làm cách nào để xem tiêu đề yêu cầu trên các yêu cầu Android WebView?

Tương đương trên iOS là ghi đè NSURLCache sẽ cung cấp cho bạn tất cả thông tin này. Sau đây là những lẽ là gần nhất với những gì tôi muốn nhưng như xa như tôi có thể nhìn thấy WebViewClient chỉ bao giờ cho chúng ta trở lại chuỗi:

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

Không thể đọc tiêu đề yêu cầu bằng 'WebView' hoặc' WebViewClient' của Android, afaik. Tôi đã giải quyết vấn đề này bằng proxy nhẹ. – acj

+0

@acj - bạn đã làm một proxy lập trình trên 'WebView' hoặc bên ngoài (cấp bộ định tuyến/mạng)? –

+0

Tôi định cấu hình nó trong Mạng di động trong cài đặt thiết bị. Một lựa chọn khác: Nếu tôi chỉ cần một phương pháp nhanh chóng và bẩn để kiểm tra các tiêu đề, tôi sẽ bắt đầu một thể hiện của netcat ('nc') trên máy tính xách tay của tôi và kết nối' WebView' với cá thể netcat. – acj

Trả lời

3

Bạn câu hỏi nghe có vẻ rất giống với this one, vì vậy câu trả lời ngay lập tức và rõ ràng là nó không thể đọc tiêu đề yêu cầu trên WebView của Android hoặc WebViewClient.

Có nhiều cách giải quyết, có thể cho phép bạn có được những gì bạn cần. This answer mô tả chi tiết hơn cách thực hiện việc này.

1

By this way bạn có thể bật gỡ lỗi cho xem web ứng dụng và sử dụng Công cụ nhà phát triển Chrome để xem đầy đủ chi tiết của bạn yêu cầu, phản ứng, css, javascript, vv

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

       return null; 
      } 
     }); 
1

Tôi cũng đã có một số vấn đề với chặn tiêu đề yêu cầu trong số WebView myWebView.

Trước tiên, tôi đã cố gắng thực hiện việc này bằng cách đặt tùy chỉnh WebViewClient cho 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; 
      } 

}); 

Nhưng phương pháp shouldOverrideUrlLoading(...) chưa bao giờ được gọi. Và tôi thực sự không có ý tưởng tại sao.

Sau đó, tôi phát hiện ra rằng đó là cách để đánh chặn một số tiêu đề phổ biến như "User-Agent", "Cache-Control", v.v .:

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

Hy vọng nó có thể giúp ai đó.

Các vấn đề liên quan