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