apache 302重定向
阿新 • • 發佈:2018-12-27
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; }