做如下设置:
ClientConnectionManager cm = new PoolingClientConnectionManager();
DefaultHttpClient client = new DefaultHttpClient(cm);
client.setRedirectStrategy(new DefaultRedirectStrategy() {
public boolean isRedirected(HttpRequest request, HttpResponse response, HttpContext context) {
boolean isRedirect = false;
try {
isRedirect = super.isRedirected(request, response, context);
} catch (ProtocolException e) {
e.printStackTrace();
}
if (!isRedirect) {
int responseCode = response.getStatusLine().getStatusCode();
if (responseCode == 301 || responseCode == 302) {
return true;
}
}
return isRedirect;
}
});
也可以自己判断返回码然后继续访问,如果使用的CloseableHttpClient closeableHttpClient = HttpClients.createDefault();这种获取httpclient实例就无法用第一种设置
if (code == 302) {
Header header = response.getFirstHeader("location"); // 跳转的目标地址是在 HTTP-HEAD上
newuri = header.getValue(); // 这就是跳转后的地址,再向这个地址发出新申请
System.out.println(newuri);
System.out.println(code);
httpPost = new HttpPost(newuri);
httpPost.setHeader("Content-Type", "application/json;charset=UTF-8");
se = new Entity();
se.setContentType(CONTENT_TYPE_TEXT_JSON);
httpPost.setEntity(se);
response = client.execute(httpPost);
code = response.getStatusLine().getStatusCode();
}