2014-03-28 64 views
0

我知道我們可以通過httpclient發送的另一個httprequest獲取它,但它可能在會話https中存在一些問題。我可以攔截android webview中的響應數據嗎?我沒有找到這樣的apis。可能嗎 ?如何攔截android webview中的響應數據?

回答

0

似乎不可能...由於Android 4.0 webkit使用原生 chromium http模塊執行所有http/https請求。它不提供Java層攔截的鉤子或回調。

除非你想之前攔截請求它派出的WebKit的,那麼你可以參考WebViewClient.shouldOverrideUrlLoading()

0

我沒有答案如何獲取資源,但我知道,你可以從webview中獲取會話Cookie,並在自己的http-Requests或Android Download-Manager中使用它。

我有一個例子,什麼只需要在PHP的會話ID的Cookie的(這是用於在大多數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標頭即可。