如何拦截android webview中的响应数据?

时间:2014-03-28 08:32:33

标签: android webview

我知道我们可以通过httpclient发送的另一个httprequest来获取它,但它可能会遇到一些会话问题,https。我可以拦截android webview中的响应数据吗?我没有找到这样的api。有可能吗?

2 个答案:

答案 0 :(得分:0)

似乎不可能......因为Android 4.0 webkit使用 native chromium http模块来执行所有http / https请求。它没有为Java层提供拦截的任何钩子或回调。

除非你想在webkit发送之前拦截之前的请求,否则你可以参考WebViewClient.shouldOverrideUrlLoading()

答案 1 :(得分:0)

我没有回答如何获取资源,但我知道,您可以从webview获取会话Cookie,并在自己的http-Requests或Android Download-Manager中使用它。

我有一个例子,什么只需要来自Cookie的php-sessionID(这用于最喜欢php的边上的登录)

 static final private String   phpSessionName             = "PHPSESSID";


/**
 * Loads PHP Session ID from Cookie
 * 
 * @date    22.09.2015
 * @version 1.0
 * @param   url         
 * @return  PHP SessionID or NULL if cookie contains no SessionID
 */
protected String getPHPSessionID(String url)
{
  String id = null;


  CookieManager cookieManager = CookieManager.getInstance();
  String cookie               = cookieManager.getCookie(url);
  if(cookie != null)
  {
    String[] cookie_parts = cookie.split(";");
    for(int t=0;t < cookie_parts.length;t++)
    { 
        String[] cookieContent = cookie_parts[t].split("=");
        if(phpSessionName.equals(cookieContent[0]))
        {
         id = cookieContent[1];           
          break;
        }
    }
  } 
  else Log.w(TAG, "getPHPSessionID: no cookie found");    

  return id;
}

你可以使用它:

 String phpSession   = getPHPSessionID("http://yourdomain.com");    
 if(phpSession != null) {
   DefaultHttpClient client = new DefaultHttpClient();
   HttpGet  request = new HttpGet("http://yourdomain.com/stuff-to-load");
   response   = client.execute( request );

   // Your code to load data or headers or response
   request.addHeader("Cookie",phpSessionName+"="+phpSession);
 }

如果您不喜欢Httpclient,因为它已被弃用,您可以在UrlConnection或其他Http客户端中使用此会话cookie,您只需要添加Cookie标头。