java httpclient 重定向_httpclient 中post请求重定向

背景:使用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");

}

7924e23156f4ea0e6447cc6ac9003d82.png

注,后面这个200,是get请求时返回的内容,get请求可以查看另外一篇文章,http://www.cnblogs.com/chongyou/p/7808035.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值