分享一个简单的HttpClient的例子
2015-09-08 15:02
585 查看
在平时的工作中,经常会使用Http去访问其他系统,此时一个Http的工具类就显得非常重要了。给大家分享一个简单的HttpClient的工具类,以备不时之需。
主要包括POST请求、GET请求和如何发送XML数据。
依赖的jar包如下:
主要包括POST请求、GET请求和如何发送XML数据。
依赖的jar包如下:
<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.3.6</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpcore</artifactId> <version>4.3.3</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>fluent-hc</artifactId> <pre name="code" class="html"><pre name="code" class="html"><pre name="code" class="html"> <version>4.3.6</version> </dependency> <dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> <version>1.6.1</version> </dependency>
import java.io.IOException; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import org.apache.http.HttpEntity; import org.apache.http.HttpStatus; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; public class HttpClientManager { private static int connectionTimeout = 1000;// 连接超时时间,毫秒 private static int soTimeout = 30000;// 读取数据超时时间,毫秒 /** HttpClient对象 */ private static CloseableHttpClient httpclient = HttpClients. custom().disableAutomaticRetries().build(); /*** 超时设置 ****/ private static RequestConfig requestConfig = RequestConfig.custom() .setSocketTimeout(soTimeout) .setConnectTimeout(connectionTimeout) .build();//设置请求和传输超时时间 /** * 根据给定的URL地址和参数字符串,以Get方法调用,如果成功返回true,如果失败返回false * * @param url * String url地址,不含参数 * @param param * String 参数字符串,例如:a=1&b=2&c=3 */ public String executeGetMethod(String url, String param) { String strResult = ""; StringBuffer serverURL = new StringBuffer(url); if (param != null && param.length() > 0) { serverURL.append("?"); serverURL.append(param); } HttpGet httpget = new HttpGet(serverURL.toString()); httpget.setConfig(requestConfig); CloseableHttpResponse response=null; try { response = httpclient.execute(httpget); HttpEntity entity = response.getEntity(); int iGetResultCode = response.getStatusLine().getStatusCode(); if (iGetResultCode >= 200 && iGetResultCode < 303) { strResult = EntityUtils.toString(entity); } else if (iGetResultCode >= 400 && iGetResultCode < 500) { strResult = "请求的目标地址不存在:" + iGetResultCode; } else { strResult = "请求错误:" + iGetResultCode; } } catch (Exception ex) { ex.printStackTrace(); } finally { try { if(response !=null){ response.close(); } } catch (Exception e) { e.printStackTrace(); } } return strResult; } /** * 根据给定的URL地址和参数字符串,以Get方法调用,如果成功返回true,如果失败返回false * * @param url * String url地址,不含参数 * @param param * Map<String, Object> 参数字表单 * @return boolean true-成功,false失败,如果返回成功可以getStrGetResponseBody() * 获取返回内容字符串,如果失败,则可访问getErrorInfo()获取错误提示。 */ public String executePostMethod(String strURL, Map<String, String> param) { String strResult = ""; HttpPost post = new HttpPost(strURL); post.setConfig(requestConfig); List<BasicNameValuePair> paraList = new ArrayList<BasicNameValuePair>(param.size()); for (Entry<String, String> pEntry : param.entrySet()) { if(null != pEntry.getValue()){ BasicNameValuePair nv = new BasicNameValuePair(pEntry.getKey(), pEntry.getValue()); paraList.add(nv); } } //使用UTF-8 UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paraList,Charset.forName("utf-8")); post.setEntity(entity); CloseableHttpResponse response=null; try { response = httpclient.execute(post); int iGetResultCode = response.getStatusLine().getStatusCode(); if (HttpStatus.SC_OK == iGetResultCode) { HttpEntity responseEntity = response.getEntity(); strResult = EntityUtils.toString(responseEntity); } } catch (Exception ex) { ex.printStackTrace(); } finally { try { if(response!=null){ response.close(); } } catch (IOException e) { } } return strResult; } /** * 发送xml数据 * @param strURL * @param params * @return */ public String postByXml(String strURL,Map<String,String> params) { String strResult = ""; CloseableHttpResponse response = null; try { HttpPost post = new HttpPost(strURL); post.setConfig(requestConfig); post.setHeader("Content-Type", "text/xml;charset=utf-8"); String xmlData = convertMap2Xml(params); StringEntity se = new StringEntity(xmlData); post.setEntity(se); response = httpclient.execute(post); response = httpclient.execute(post); int iGetResultCode = response.getStatusLine().getStatusCode(); if (HttpStatus.SC_OK == iGetResultCode) { HttpEntity responseEntity = response.getEntity(); strResult = EntityUtils.toString(responseEntity); } } catch (Exception e) { e.printStackTrace(); } finally { try { if(response !=null){ response.close(); } } catch (Exception e) { e.printStackTrace(); } } return strResult; } /** * 将map转换为xml * @param map */ private static String convertMap2Xml(Map<String,String> map) { Set<Entry<String,String>> entrys = map.entrySet(); Iterator<Entry<String,String>> iter = entrys.iterator(); Document doc = DocumentHelper.createDocument(); Element root = DocumentHelper.createElement("xml"); while(iter.hasNext()) { Entry<String,String> entry = iter.next(); Element key = DocumentHelper.createElement(entry.getKey()); key.addCDATA(entry.getValue()); root.add(key); } doc.add(root); return doc.asXML(); } }
相关文章推荐
- IOS中http请求的cookie查看,删除,添加
- <转>virsh使用qemu+tcp访问远程libvirtd
- hdu 3549 Flow Problem(简单网络流Dinic)
- TCP 连接状态图
- IOS 9 https限制
- httpPost中文乱码解决方案(android)
- iOS开发网络篇之文件下载、大文件下载、断点下载
- HTTP1.1协议的chunked编码(chunked transfer encoding分块传输编码)
- tcp窗口滑动以及拥塞控制
- linux UDP,TCP相关特性
- 光速在网络上不够用
- windows下同一进程创建多份http的session方法
- 如何利用socket进行HTTP访问
- 看C#实现源码,可以参考算法 HttpUtility.UrlEncode
- 事件 ID 1196群集网络名称资源“群集名称”注册一个或多个相关联的 DNS
- 修改HTTP Post/get数据利器TamperIE
- http://www.cs.berkeley.edu/~rxin/ &&& spark生态系统简析
- java通过HTTP接收xml和返回xml
- TCP/IP、Http、Socket的区别
- TCP 连接断连问题剖析