public static HttpResponse RedirectUrl(String url) {
try {
HttpParams httpParameters = new BasicHttpParams();
// 设置连接管理器的超时
ConnManagerParams.setTimeout(httpParameters, 20000);
// 设置连接超时
HttpConnectionParams.setConnectionTimeout(httpParameters, 20000);
// 设置socket超时
HttpConnectionParams.setSoTimeout(httpParameters, 20000);
//设置自定义重定向
HttpClientParams.setRedirecting(httpParameters, false);
HttpClient hc = getHttpClient(httpParameters);
HttpGet httpGet = new HttpGet(url);
httpGet.setParams(httpParameters);
HttpResponse response = hc.execute(httpGet);
return response;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
private static int retry = 0;
/**
* 尝试获取referrer次数
*/
public static int retryNum = 3;
/**
* 用重定向的方式去获取refer
* 该方法用于判断最终的链接得出
*
* @param context
* @param tackUrl
* @param id
* @return
*/
public static String getRedirectUrl(Context context, String tackUrl, String id) {
Trace.e("getRedirectUrl", "retry==" + retry);
try {
HttpResponse response = PackHttp.RedirectUrl(tackUrl);
if (response == null) {
retry++;
getRedirectUrl(context, tackUrl, id);
return "";
}
int code = response.getStatusLine().getStatusCode();
if (code != HttpStatus.SC_OK) {
Header[] hander = response.getHeaders("Location");
if (hander != null && hander.length > 0) {
String redictUrl = hander[hander.length - 1].getValue();
//结束重定向条件
if (redictUrl.startsWith(String.valueOf(new char[]{'m', 'a', 'r', 'k', 'e', 't', ':',}))
|| redictUrl.startsWith(Const.URL_REDIR_URL)) {
updateRef(context, id, redictUrl);
return "";
}
//多次判定重定向
return getRedirectUrl(context, redictUrl, id);
}
} else if (code == HttpStatus.SC_OK) {
String redictUrl = tackUrl;
if (redictUrl.startsWith(String.valueOf(new char[]{'m', 'a', 'r', 'k', 'e', 't', ':',}))
|| redictUrl.startsWith(Const.URL_REDIR_URL)) {
updateRef(context, id, redictUrl);
} else {//再次尝试获取
retry++;
getRedirectUrl(context, redictUrl, id);
}
}
} catch (Exception e) {
e.printStackTrace();
retry++;
getRedirectUrl(context, tackUrl, id);
}
return tackUrl;
}