关于HttpClient在服务器端使用请求碰到的问题总结
2015-08-12 11:21
691 查看
static CloseableHttpClient client = null;
public static HttpEntity connectForResult(String url) {
HttpGet get = new HttpGet(url);
try {
client = HttpClientBuilder
.create()
.setSSLHostnameVerifier(new NoopHostnameVerifier())
.setSSLContext(
new SSLContextBuilder().loadTrustMaterial(null,
new TrustSelfSignedStrategy()).build())
.build();
CloseableHttpResponse response = client.execute(get);
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
HttpEntity entity = response.getEntity();
if(entity != null) {
System.out.println(entity);
return entity;
} else{
System.out.println("entity为空!");
}
}
} catch (KeyManagementException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (KeyStoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
get.abort();
try {
client.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return null;
}
以上为我个人对httpClient的一个简单封装,写了一个静态方法方便调用,但是在用的过程中,出现了一些问题。记录一下:
1: “HttpEntity entity = response.getEntity();”这句话对相同的response对象只能使用一次。
2: 在作为静态方法时,由于使用的都是同一个client对象,所以不能在finally中写对资源的关闭,否则下一次调用就会报流关闭的错。写一个静态方法专门用于关闭资源
3: 网上说的对response.getEntity() 得到的entity对象的长度有1k长度的限制 是错的,一开始也是受这个误导查了很多资料都没找出问题。
public static HttpEntity connectForResult(String url) {
HttpGet get = new HttpGet(url);
try {
client = HttpClientBuilder
.create()
.setSSLHostnameVerifier(new NoopHostnameVerifier())
.setSSLContext(
new SSLContextBuilder().loadTrustMaterial(null,
new TrustSelfSignedStrategy()).build())
.build();
CloseableHttpResponse response = client.execute(get);
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
HttpEntity entity = response.getEntity();
if(entity != null) {
System.out.println(entity);
return entity;
} else{
System.out.println("entity为空!");
}
}
} catch (KeyManagementException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (KeyStoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
get.abort();
try {
client.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return null;
}
以上为我个人对httpClient的一个简单封装,写了一个静态方法方便调用,但是在用的过程中,出现了一些问题。记录一下:
1: “HttpEntity entity = response.getEntity();”这句话对相同的response对象只能使用一次。
2: 在作为静态方法时,由于使用的都是同一个client对象,所以不能在finally中写对资源的关闭,否则下一次调用就会报流关闭的错。写一个静态方法专门用于关闭资源
3: 网上说的对response.getEntity() 得到的entity对象的长度有1k长度的限制 是错的,一开始也是受这个误导查了很多资料都没找出问题。
相关文章推荐
- 网络图片下载到手机返回null的问题解决方法
- Http响应码
- Java安全通信:HTTPS与SSL
- HTTP状态码
- TCP长连接与短连接的区别
- HTTP、TCP、UDP、Socket基本概念
- Poco C++——HTTP的post请求和get请求
- TCP/IP格式
- IM开发通信协议基础知识(一)---TCP、UDP、HTTP、SOCKET
- TCP/IP协议头部结构体(网摘小结)(转)
- 计算机网络的五层协议体系
- 如何计算网络地址和广播地址
- SSG140 web、telnet、ssh无法访问,仅支持console
- 网络篇----http协议
- iOS 对基于AFNetworking框架网络请求的简单封装
- android之ConnectivityManager简介,网络连接状态
- BIM360: C#如何发送HTTP GET和POST请求登陆BIM 360 Glue以及获取项目列表
- TQ2440 学习笔记—— 2、Win7PC 与虚拟机Ubuntu互通 ping 的网络设置
- 虚拟机中如何进行正确的网络配置
- 网络篇----解析xml