HttpClient使用:

maven:

  1. <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
  2. <dependency>
  3. <groupId>org.apache.httpcomponents</groupId>
  4. <artifactId>httpclient</artifactId>
  5. <version>4.5.3</version>
  6. </dependency>

code:

  1. package com.qhong.http;
  2.  
  3. import org.apache.commons.logging.Log;
  4. import org.apache.commons.logging.LogFactory;
  5. import org.apache.commons.httpclient.*;
  6. import org.apache.commons.httpclient.auth.AuthScope;
  7. import org.apache.commons.httpclient.methods.PostMethod;
  8. import org.apache.commons.httpclient.methods.GetMethod;
  9.  
  10. import java.util.Iterator;
  11. import java.util.Map;
  12. import java.net.SocketTimeoutException;
  13. import java.io.BufferedReader;
  14. import java.io.InputStreamReader;
  15.  
  16. public class HttpInvoker {
  17. private Log logger = LogFactory.getLog(HttpInvoker.class);
  18. private static HttpInvoker httpInvoker = new HttpInvoker();
  19. private HttpClient client = null;
  20. private String charset ="utf-8";
  21. private int timeout = 10000;
  22. private boolean useProxy = false;
  23. private String proxyHost = null;
  24. private int proxyPort;
  25. private String proxyUsername = null;
  26. private String proxyPassword = null;
  27. private boolean initialized = false;
  28.  
  29. public static HttpInvoker getInstance() {
  30. return httpInvoker;
  31. }
  32.  
  33. private HttpInvoker() {
  34. client = new HttpClient(new MultiThreadedHttpConnectionManager());
  35. client.getParams().setParameter("http.protocol.content-charset", "utf-8");
  36. client.getParams().setContentCharset("utf-8");
  37. client.getParams().setSoTimeout(timeout);
  38. }
  39.  
  40. public HttpInvoker(String charset, int timeout, boolean useProxy,
  41. String proxyHost, int proxyPort, String proxyUsername,
  42. String proxyPassword) {
  43. client = new HttpClient(new MultiThreadedHttpConnectionManager());
  44. if(charset != null && !charset.trim().equals("")) {
  45. this.charset = charset;
  46. }
  47. if(timeout > 0) {
  48. this.timeout = timeout;
  49. }
  50. client.getParams().setParameter("http.protocol.content-charset", charset);
  51. client.getParams().setContentCharset(charset);
  52. client.getParams().setSoTimeout(timeout);
  53. if(useProxy && proxyHost != null &&
  54. !proxyHost.trim().equals("") && proxyPort > 0) {
  55. HostConfiguration hc = new HostConfiguration();
  56. hc.setProxy(proxyHost, proxyPort);
  57. client.setHostConfiguration(hc);
  58. if (proxyUsername != null && !proxyUsername.trim().equals("") &&
  59. proxyPassword != null && !proxyPassword.trim().equals("")) {
  60. client.getState().setProxyCredentials(AuthScope.ANY,
  61. new UsernamePasswordCredentials(proxyUsername, proxyPassword));
  62. }
  63. }
  64. initialized = true;
  65. logger.debug("HttpInvoker初始化完成");
  66. }
  67.  
  68. public synchronized void init() {
  69. if(charset != null && !charset.trim().equals("")) {
  70. client.getParams().setParameter("http.protocol.content-charset", charset);
  71. client.getParams().setContentCharset(charset);
  72. }
  73. if(timeout > 0) {
  74. client.getParams().setSoTimeout(timeout);
  75. }
  76. if(useProxy && proxyHost != null &&
  77. !proxyHost.trim().equals("") && proxyPort > 0) {
  78. HostConfiguration hc = new HostConfiguration();
  79. hc.setProxy(proxyHost, proxyPort);
  80. client.setHostConfiguration(hc);
  81. if (proxyUsername != null && !proxyUsername.trim().equals("") &&
  82. proxyPassword != null && !proxyPassword.trim().equals("")) {
  83. client.getState().setProxyCredentials(AuthScope.ANY,
  84. new UsernamePasswordCredentials(proxyUsername, proxyPassword));
  85. }
  86. }
  87. initialized = true;
  88. logger.debug("HttpInvoker初始化完成");
  89. }
  90.  
  91. public String invoke(String url) throws Exception {
  92. return invoke(url, null, false);
  93. }
  94.  
  95. public String invoke(String url, Map params, boolean isPost) throws Exception {
  96. logger.debug("HTTP调用[" + (isPost?"POST":"GET") + "][" + url + "][" + params + "]");
  97. HttpMethod httpMethod = null;
  98. String result = "";
  99. try {
  100. if(isPost && params != null && params.size() > 0) {
  101. Iterator paramKeys = params.keySet().iterator();
  102. httpMethod = new PostMethod(url);
  103. NameValuePair[] form = new NameValuePair[params.size()];
  104. int formIndex = 0;
  105. while(paramKeys.hasNext()) {
  106. String key = (String)paramKeys.next();
  107. Object value = params.get(key);
  108. if(value != null && value instanceof String && !value.equals("")) {
  109. form[formIndex] = new NameValuePair(key, (String)value);
  110. formIndex++;
  111. } else if(value != null && value instanceof String[] &&
  112. ((String[])value).length > 0) {
  113. NameValuePair[] tempForm =
  114. new NameValuePair[form.length + ((String[])value).length - 1];
  115. for(int i=0; i<formIndex; i++) {
  116. tempForm[i] = form[i];
  117. }
  118. form = tempForm;
  119. for(String v : (String[])value) {
  120. form[formIndex] = new NameValuePair(key, (String)v);
  121. formIndex++;
  122. }
  123. }
  124. }
  125. ((PostMethod)httpMethod).setRequestBody(form);
  126. } else {
  127. if(params != null && params.size() > 0) {
  128. Iterator paramKeys = params.keySet().iterator();
  129. StringBuffer getUrl = new StringBuffer(url.trim());
  130. if(url.trim().indexOf("?") > -1) {
  131. if(url.trim().indexOf("?") < url.trim().length()-1 &&
  132. url.trim().indexOf("&") < url.trim().length()-1) {
  133. getUrl.append("&");
  134. }
  135. } else {
  136. getUrl.append("?");
  137. }
  138. while(paramKeys.hasNext()) {
  139. String key = (String)paramKeys.next();
  140. Object value = params.get(key);
  141. if(value != null && value instanceof String && !value.equals("")) {
  142. getUrl.append(key).append("=").append(value).append("&");
  143. } else if(value != null && value instanceof String[] &&
  144. ((String[])value).length > 0) {
  145. for(String v : (String[])value) {
  146. getUrl.append(key).append("=").append(v).append("&");
  147. }
  148. }
  149. }
  150. if(getUrl.lastIndexOf("&") == getUrl.length()-1) {
  151. httpMethod = new GetMethod(getUrl.substring(0, getUrl.length()-1));
  152. } else {
  153. httpMethod = new GetMethod(getUrl.toString());
  154. }
  155. } else {
  156. httpMethod = new GetMethod(url);
  157. }
  158. }
  159. client.executeMethod(httpMethod);
  160. // result = httpMethod.getResponseBodyAsString();
  161. BufferedReader reader = new BufferedReader(new InputStreamReader(
  162. httpMethod.getResponseBodyAsStream(),"utf-8"));
  163. String line = null;
  164. String html = null;
  165. while((line = reader.readLine()) != null){
  166. if(html == null) {
  167. html = "";
  168. } else {
  169. html += "\r\n";
  170. }
  171. html += line;
  172. }
  173. if(html != null) {
  174. result = new String(html.getBytes("utf-8"), charset);
  175. }
  176. } catch (SocketTimeoutException e) {
  177. logger.error("连接超时[" + url + "]");
  178. throw e;
  179. } catch (java.net.ConnectException e) {
  180. logger.error("连接失败[" + url + "]");
  181. throw e;
  182. } catch (Exception e) {
  183. logger.error("连接时出现异常[" + url + "]");
  184. throw e;
  185. } finally {
  186. if (httpMethod != null) {
  187. try {
  188. httpMethod.releaseConnection();
  189. } catch (Exception e) {
  190. logger.error("释放网络连接失败[" + url + "]");
  191. throw e;
  192. }
  193. }
  194. }
  195.  
  196. return result;
  197. }
  198.  
  199. public void setCharset(String charset) {
  200. this.charset = charset;
  201. }
  202.  
  203. public void setTimeout(int timeout) {
  204. this.timeout = timeout;
  205. }
  206.  
  207. public void setProxyHost(String proxyHost) {
  208. this.proxyHost = proxyHost;
  209. }
  210.  
  211. public void setProxyPort(int proxyPort) {
  212. this.proxyPort = proxyPort;
  213. }
  214.  
  215. public void setProxyUsername(String proxyUsername) {
  216. this.proxyUsername = proxyUsername;
  217. }
  218.  
  219. public void setProxyPassword(String proxyPassword) {
  220. this.proxyPassword = proxyPassword;
  221. }
  222.  
  223. public void setUseProxy(boolean useProxy) {
  224. this.useProxy = useProxy;
  225. }
  226.  
  227. public synchronized boolean isInitialized() {
  228. return initialized;
  229. }
  230. }

test:

  1. package com.qhong.http;
  2.  
  3. import java.util.HashMap;
  4. import java.util.Map;
  5.  
  6. public class test {
  7.  
  8. public static void main(String[] args) throws Exception{
  9. HttpInvoker httpInvoker=HttpInvoker.getInstance();
  10. //Get
  11. String content = httpInvoker.invoke("http://www.baidu.com");
  12. System.out.println(content);
  13. //Post
  14. Map<String,String> params=new HashMap<String,String>();
  15. params.put("a","testDFRZW952");
  16. params.put("na","Zn+4A+yXAfrT847NjCToRg==");
  17. params.put("pe","sFt/8rWLN1F+Fd8RTnc9eA==");
  18. params.put("pv","上海市");
  19. params.put("cy","上海");
  20. params.put("la","120000");
  21. String url="http://jwebplat.momead.com/d/call/info";
  22. String content2=httpInvoker.invoke(url,params,true);
  23. System.out.println(content2);
  24. }
  25. }

上面test中的map参数,在请求体中的显示为:

  1. a=testDFRZW952&na=Zn%2B4A%2ByXAfrT847NjCToRg%3D%3D&pe=sFt%2F8rWLN1F%2BFd8RTnc9eA%3D%3D&la=120000&pv=%E4%B8%8A%E6%B5%B7%E5%B8%82&cy=%E4%B8%8A%E6%B5%B7

如果想使用json方式请求,这个工具类还不合适

  1. package com.qhong.http;
  2.  
  3. import net.sf.json.JSONObject;
  4. import org.apache.commons.httpclient.HttpStatus;
  5. import org.apache.http.HttpResponse;
  6. import org.apache.http.client.methods.HttpGet;
  7. import org.apache.http.client.methods.HttpPost;
  8. import org.apache.http.entity.StringEntity;
  9. import org.apache.http.impl.client.DefaultHttpClient;
  10. import org.apache.http.util.EntityUtils;
  11. import org.slf4j.Logger;
  12. import org.slf4j.LoggerFactory;
  13.  
  14. import java.io.IOException;
  15. import java.net.URLDecoder;
  16.  
  17. public class HttpRequestUtils {
  18.  
  19. private static Logger logger = LoggerFactory.getLogger(HttpRequestUtils.class); //日志记录
  20.  
  21. /**
  22. * httpPost
  23. *
  24. * @param url 路径
  25. * @param jsonParam 参数
  26. * @return
  27. */
  28. public static JSONObject httpPost(String url, JSONObject jsonParam) {
  29. return httpPost(url, jsonParam, false);
  30. }
  31.  
  32. /**
  33. * post请求
  34. *
  35. * @param url url地址
  36. * @param jsonParam 参数
  37. * @param noNeedResponse 不需要返回结果
  38. * @return
  39. */
  40.  
  41. public static JSONObject httpPost(String url, JSONObject jsonParam, boolean noNeedResponse) {
  42. //post请求返回结果
  43. DefaultHttpClient httpClient = new DefaultHttpClient();
  44. JSONObject jsonResult = null;
  45. HttpPost method = new HttpPost(url);
  46. try {
  47. if (null != jsonParam) {
  48. //解决中文乱码问题
  49. StringEntity entity = new StringEntity(jsonParam.toString(), "utf-8");
  50. entity.setContentEncoding("UTF-8");
  51. entity.setContentType("application/json");
  52. method.setEntity(entity);
  53. }
  54. HttpResponse result = httpClient.execute(method);
  55. url = URLDecoder.decode(url, "UTF-8");
  56. /**请求发送成功,并得到响应**/
  57. if (result.getStatusLine().getStatusCode() == 200) {
  58. String str = "";
  59. try {
  60. /**读取服务器返回过来的json字符串数据**/
  61. str = EntityUtils.toString(result.getEntity());
  62. if (noNeedResponse) {
  63. return null;
  64. }
  65. /**把json字符串转换成json对象**/
  66. jsonResult = JSONObject.fromObject(str);
  67. } catch (Exception e) {
  68. logger.error("post请求提交失败:" + url, e);
  69. }
  70. }
  71. } catch (IOException e) {
  72. logger.error("post请求提交失败:" + url, e);
  73. }
  74. return jsonResult;
  75. }
  76.  
  77. /**
  78. * 发送get请求
  79. *
  80. * @param url 路径
  81. * @return
  82. */
  83.  
  84. public static JSONObject httpGet(String url) {
  85. //get请求返回结果
  86. JSONObject jsonResult = null;
  87. try {
  88. DefaultHttpClient client = new DefaultHttpClient();
  89. //发送get请求
  90. HttpGet request = new HttpGet(url);
  91. HttpResponse response = client.execute(request);
  92. /**请求发送成功,并得到响应**/
  93. if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
  94. /**读取服务器返回过来的json字符串数据**/
  95. String strResult = EntityUtils.toString(response.getEntity());
  96. /**把json字符串转换成json对象**/
  97. jsonResult = JSONObject.fromObject(strResult);
  98. url = URLDecoder.decode(url, "UTF-8");
  99. } else {
  100. logger.error("get请求提交失败:" + url);
  101. }
  102. } catch (IOException e) {
  103. logger.error("get请求提交失败:" + url, e);
  104. }
  105. return jsonResult;
  106. }
  107. }

http://www.cnblogs.com/ITtangtang/p/3968093.html

http://blog.csdn.net/hwwzyh/article/details/39184677

http://www.cnblogs.com/QQParadise/articles/5020215.html

HttpClient 的使用的更多相关文章

  1. HttpClient的替代者 - RestTemplate

    需要的包 ,除了Spring的基础包外还用到json的包,这里的数据传输使用json格式 客户端和服务端都用到一下的包 <!-- Spring --> <dependency> ...

  2. 关于微软HttpClient使用,避免踩坑

    最近公司对于WebApi的场景使用也越来越加大了,随之而来就是Api的客户端工具我们使用哪个?我们最常用的估计就是HttpClient,在微软类库中命名空间地址:System.Net.Http,是一个 ...

  3. 使用HttpClient的优解

    新工作入职不满半周,目前仍然还在交接工作,适应环境当中,笔者不得不说看别人的源码实在是令人痛苦.所幸今天终于将大部分工作流畅地看了一遍,接下来就是熟悉框架技术的阶段了. 也正是在看源码的过程当中,有一 ...

  4. Java的异步HttpClient

    上篇提到了高性能处理的关键是异步,而我们当中许多人依旧在使用同步模式的HttpClient访问第三方Web资源,我认为原因之一是:异步的HttpClient诞生较晚,许多人不知道:另外也可能是大多数W ...

  5. 揭秘Windows10 UWP中的httpclient接口[2]

    阅读目录: 概述 如何选择 System.Net.Http Windows.Web.Http HTTP的常用功能 修改http头部 设置超时 使用身份验证凭据 使用客户端证书 cookie处理 概述 ...

  6. C#中HttpClient使用注意:预热与长连接

    最近在测试一个第三方API,准备集成在我们的网站应用中.API的调用使用的是.NET中的HttpClient,由于这个API会在关键业务中用到,对调用API的整体响应速度有严格要求,所以对HttpCl ...

  7. HttpClient调用webApi时注意的小问题

    HttpClient client = new HttpClient(); client.BaseAddress = new Uri(thisUrl); client.GetAsync("a ...

  8. HttpClient相关

    HTTPClient的主页是http://jakarta.apache.org/commons/httpclient/,你可以在这里得到关于HttpClient更加详细的信息 HttpClient入门 ...

  9. Atitit.http httpclient实践java c# .net php attilax总结

    Atitit.http httpclient实践java c# .net php attilax总结 1. Navtree>> net .http1 2. Httpclient理论1 2. ...

  10. 使用httpclient发送get或post请求

    HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建 ...

随机推荐

  1. 2015 湘潭大学程序设计比赛(Internet)H题-括号匹配

    括号匹配 Accepted : 30   Submit : 234 Time Limit : 10000 MS   Memory Limit : 65536 KB 题目描述 有一串括号(只包含&quo ...

  2. QEMU IO事件处理框架

    Qemu IO事件处理框架 qemu是基于事件驱动的,在基于KVM的qemu模型中,每一个VCPU对应一个qemu线程,且qemu主线程负责各种事件的监听,这里有一个小的IO监听框架,本节对此进行介绍 ...

  3. SQLServerDBA十大必备工具---让生活轻松点

    原贴:http://www.cnblogs.com/fygh/archive/2012/04/25/2469563.html 国外整理拓展帖:http://weblogs.sqlteam.com/ml ...

  4. Python3学习之路~2.4 字典操作

    字典一种key - value 的数据类型,使用就像我们上学用的字典,通过笔划.字母来查对应页的详细内容. 定义字典(dictionary) info = { 'stu1101': "Amy ...

  5. [py]flask从0到1-模板/增删改查

    flask知识点 1.后端渲染html到前端 render_template 2.后端获取前端数据 request.args.get 3.前端获取后端数据 模板 4.警示消息 flash {{ get ...

  6. [LeetCode] 312. Burst Balloons_hard tag: 区间Dynamic Programming

    Given n balloons, indexed from 0 to n-1. Each balloon is painted with a number on it represented by ...

  7. pod 的warning一定要注意消除,要不然你的pod配置有问题无法导入

    and the CHANGELOG for this version http://git.io/BaH8pQ. Downloading dependencies Using BlocksKit (2 ...

  8. PHP中header('content-type:text/html;charset="utf-8')和error_reporting()的作用

    1.header PHP文件插入header("Content-type: text/html; charset=utf-8");相当于页面里面的<meta http-equ ...

  9. pythonon ddt数据驱动二(json, yaml 驱动)

    这一篇主要是关于文件的数据驱动. 一.通过json文件驱动 @ddt class MyTest(unittest.TestCase): @file_data('test_data_list.json' ...

  10. Python线程,进程,携程,I/O同步,异步

    只有本人能看懂的-Python线程,进程,携程,I/O同步,异步 举个栗子: 我想get三个url,先用普通的for循环 import requests from multiprocessing im ...