背景:使用httpclient 的post请求进行登录,需要重定向登录,请求重定向后的地址
在httpclient中post请求不像get请求自己可以重定向,实现方式是 判断post请求返回码是否是302,如果是那么就获取传递过来的Location的地址,进行拼接,在进行一个get的请求
实现代码
public Map doPost(String url, Map map, String charset) {
HttpClient httpClient = null;
HttpPost httpPost = null;
String result = null;
String domain = "http://user.hqygou.com";
Map returnmap = new HashMap();
try {
httpClient = new SSLClient();
httpPost = new HttpPost(url);
// 设置参数
List list = new ArrayList();
Iterator iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
Entry elem = (Entry) iterator.next();
list.add(new BasicNameValuePair(elem.getKey(), elem.getValue()));
System.out.println("请求的参数为:" + elem.getKey() + ":" + elem.getValue());
}
if (list.size() > 0) {
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list, charset);
httpPost.setEntity(entity);
}
// 设置头部信息
httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
HttpResponse response = httpClient.execute(httpPost);
if (response != null) {
int code = response.getStatusLine().getStatusCode();
System.out.println("返回的code为:" + code);
if (code == 302) { #判断post的请求返回码
Header[] hr = response.getAllHeaders();
for (int i = 0; i < hr.length; i++) {
Header header1 = hr[i];
System.out.println("头部的所有内容:" + header1);
}
String hearder = response.getHeaders("Location")[0].toString().split(":")[1].trim(); #获取返回码中头部中location 就是重定向的地址
String redirecturl = domain + hearder; //需要和域名进行拼接
System.out.println("开始重定向,地址为:" + redirecturl);
cookies = response.getHeaders("Set-Cookie")[0].toString().split(":")[1].trim();
System.out.println("获取的cookie:" + cookies);
cookies = cookies.split(";")[0].trim();
httpGet(redirecturl, cookies); #get请求,把获取的cookie进行一个拼接
} else {
HttpEntity resEntity = response.getEntity();
if (resEntity != null) {
result = EntityUtils.toString(resEntity, charset);
}
}
returnmap.put("content", result);
returnmap.put("cookies", cookies);
}
} catch (Exception ex) {
ex.printStackTrace();
}
return returnmap;
}
运行入口
public static void main(String[] args) {
test post = new test();
String url = "http://xxx/login/index/checklogin";
Map map = new HashMap();
map.put("from", "xx");
map.put("username", "xx");
map.put("password", "xx");
post.doPost(url, map, "UTF-8");
}
注,后面这个200,是get请求时返回的内容,get请求可以查看另外一篇文章,http://www.cnblogs.com/chongyou/p/7808035.html