HttpClient:可以用来在代码中模拟发送http请求的客户端工具包。
发送http请求,接受http请求返回来的消息。
本文中给出的例子都是根据httpClient4.3.4.jar包编写的。
1.HttpGet
public String httpGet(String url){
String result=null;
try {
HttpGet httpGet = new HttpGet(url);
CloseableHttpResponse response = this.httpClient.execute(httpGet);
final int statusCode = response.getStatusLine().getStatusCode();
if(statusCode == org.apache.http.HttpStatus.SC_OK){
if (response.containsHeader("ERROR_SIGN")
&& "Y".equals(response
.getHeaders("ERROR_SIGN")[0]
.getValue())) {
}
else{
HttpEntity entity = response.getEntity();
result = EntityUtils.toString(entity);//获取字符串
if(entity != null){
final InputStream instream = entity.getContent();//访问url
try{
instream.read();
}finally{
instream.close();
}
}
byte[] byteArray=EntityUtils.toByteArray(entity);//获取字节数字
}
}else{
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
2.HttpPost,HttpPut,HttpDelete这些方法使用和上面例子差不多,只要将相应HttpGet换成HttpPost,HttpPut和HttpDelete实例即可。
注意这些方法都要finally 释放连接
以上这些例子,只是简单的介绍,实际上httpClient并没有这么简单,还有许多其他的知识点需要了解,比如说Http请求自动获取cookie,请求响应多长时间算失效,连接间隔等等。
要想在已有工具基础上写出好的封装工具,需要会读文档,了解对象的基本含义和设置,拥有远见的思想。
3.虽然觉得HttpPost等方法调用相似,但还是决定给个例子,写些返回方法的不同值的进行处理,包括设置HttpHeader等。
HttpPost
protected void addMapToParamList(final List<NameValuePair> paramList,final Map<String,? extends Object> paramMap){
if (paramMap != null) {
for (final String key : paramMap.keySet()) {
final Object value = paramMap.get(key);
if(value instanceof List<?>){
for(final String v : (List<String>)value){
paramList.add(new BasicNameValuePair(key, v));
}
} else if(value.getClass().isArray()){
for(final String v : (String[])value){
paramList.add(new BasicNameValuePair(key, v));
}
}else{
paramList.add(new BasicNameValuePair(key, (String)value));
}
}
}
}
public String httpPost(String url, Map<String, Object> paramsMap) {
String result = null;
final List<NameValuePair> paramList = new ArrayList<NameValuePair>();
addMapToParamList(paramList, paramsMap);
HttpEntity httpEntity;
try {
httpEntity = new UrlEncodedFormEntity(paramList,encode);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
final HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(httpEntity);
try {
CloseableHttpResponse response = this.httpClient.execute(httpPost);
final int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == org.apache.http.HttpStatus.SC_OK) {
if (response.containsHeader("ERROR_SIGN")
&& "Y".equals(response.getHeaders("ERROR_SIGN")[0]
.getValue())) {
} else {
HttpEntity entity1 = response.getEntity();
result = EntityUtils.toString(entity1);
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
httpPost.releaseConnection();
}
return result;
}
4.HttpGet,HttpDelete,HttpPut,HttpPost这些都是HttpRequest对象的实现类,所以可以给他们设置request的内容,Header对象等(Accept-Type,Media-Type,Accept-Language等待),如果想要将返回的对象返回为json,xml等则加入一些jar包对象和json或xml的相互转换
版权声明:本文为pupin9原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。