今天公司让我用httpclient远程调用另一个项目的接口,看了几篇博客后仍然无法解决,原来是请求到另一个项目时,发生重复登陆,几天做个补充!如果是post和不附带参数的get,可参照其他博客一起看!
public String test(HttpSession session, HttpServletRequest httpServletRequest) throws Exception {
String result= null;
// 创建Httpclient对象,相当于打开了浏览器
CloseableHttpClient httpclient = HttpClients.createDefault();
// 创建URI对象,并且设置请求参数
URI uri = new URIBuilder(prop.getProperty(menuTreeUrl)).setParameter("", "").build();//设置参数一个是key,一个是value
// 创建HttpGet请求,相当于在浏览器输入地址
HttpGet httpGet = new HttpGet(uri);
//主要是下面这段代码,添加头,请求到另一个项目时就无需再重复登陆
Enumeration<String> headerNames = httpServletRequest.getHeaderNames();
while (headerNames.hasMoreElements())
{
String headerName = headerNames.nextElement();
httpGet.addHeader(headerName, httpServletRequest.getHeader(headerName));
}
CloseableHttpResponse response = null;
try {
// 执行请求,相当于敲完地址后按下回车。获取响应
response = httpclient.execute(httpGet);
// 判断返回状态是否为200
if (response.getStatusLine().getStatusCode() == 200) {
// 解析响应,获取数据
result = EntityUtils.toString(response.getEntity(), "UTF-8");
}
} finally {
if (response != null) {
// 关闭资源
response.close();
}
// 关闭浏览器
httpclient.close();
}