org.apache.commons.httpclient工具类

摘要:
“,e);returnHttpStatus.SC_BAD_REQUEST;}最后{method.releaseConnection();}记录器。信息;return方法。getStatusCode();}/***使用参数执行HTTP GET请求并返回请求响应的JSON字符串**@paramurl请求的URL地址**@return请求响应的字符串*/publicstaticStringdoGet{//构造HttpClient HttpClientclient=newHttpClient()的实例;//设置参数//创建GET方法的实例GetMethodmethod=newGetMethod(URL+“?

import
org.apache.commons.httpclient.DefaultHttpMethodRetryHandler; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpMethod; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.NameValuePair; import org.apache.commons.httpclient.URIException; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.methods.PostMethod; import org.apache.commons.httpclient.methods.StringRequestEntity; import org.apache.commons.httpclient.params.HttpConnectionManagerParams; import org.apache.commons.httpclient.params.HttpMethodParams; import org.apache.commons.httpclient.util.URIUtil; import org.apache.commons.lang3.StringUtils; import org.apache.http.HttpEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.util.StreamUtils; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.List; import java.util.Map; public class HttpUtils { private static final Logger logger = LoggerFactory.getLogger(HttpUtil.class); /** * 执行一个HTTP GET请求,返回请求响应的HTML * * @param url 请求的URL地址 * @return 返回请求响应的HTML */ public static int doGet(String url) { HttpClient client = new HttpClient(); HttpMethod method = new GetMethod(url); try { client.executeMethod(method); } catch (URIException e) { logger.error("执行HTTP Get请求时,发生异常!", e); return HttpStatus.SC_BAD_REQUEST; } catch (IOException e) { logger.error("执行HTTP Get请求" + url + "时,发生异常!", e); return HttpStatus.SC_BAD_REQUEST; } finally { method.releaseConnection(); } logger.info("执行HTTP GET请求,返回码: {}", method.getStatusCode()); return method.getStatusCode(); } /** * 执行一个带参数的HTTP GET请求,返回请求响应的JSON字符串 * * @param url 请求的URL地址 * @return 返回请求响应的JSON字符串 */ public static String doGet(String url, String param) { // 构造HttpClient的实例 HttpClient client = new HttpClient(); //设置参数 // 创建GET方法的实例 GetMethod method = new GetMethod(url + "?" + param); // 使用系统提供的默认的恢复策略 method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler()); try { // 执行getMethod client.executeMethod(method); if (method.getStatusCode() == HttpStatus.SC_OK) { return StreamUtils.copyToString(method.getResponseBodyAsStream(), Charset.forName("utf-8")); } } catch (IOException e) { logger.error("执行HTTP Get请求" + url + "时,发生异常!", e); } finally { method.releaseConnection(); } return null; } /** * 执行一个HTTP GET请求,返回请求响应的HTML * * @param url 请求的URL地址 * @param queryString 请求的查询参数,可以为null * @param charset 字符集 * @param pretty 是否美化 * @return 返回请求响应的HTML */ public static String doGet(String url, String queryString, String charset, boolean pretty) { //logger.info("http的请求地址为:"+url); logger.info("http的请求参数为:" + queryString); StringBuffer response = new StringBuffer(); HttpClient client = new HttpClient(); HttpMethod method = new GetMethod(url); try { if (StringUtils.isNotBlank(queryString)) { method.setQueryString(URIUtil.encodeQuery(queryString)); } HttpConnectionManagerParams managerParams = client.getHttpConnectionManager().getParams(); // 设置连接的超时时间 managerParams.setConnectionTimeout(3 * 60 * 1000); // 设置读取数据的超时时间 managerParams.setSoTimeout(5 * 60 * 1000); client.executeMethod(method); logger.info("http的请求地址为:" + url + ",返回的状态码为" + method.getStatusCode()); BufferedReader reader = new BufferedReader(new InputStreamReader(method.getResponseBodyAsStream(), charset)); String line; while ((line = reader.readLine()) != null) { if (pretty) { response.append(line).append(System.getProperty("line.separator")); } else { response.append(line); } } reader.close(); } catch (Exception e) { logger.error("执行HTTP Get请求" + url + "时,发生异常!" + e); return response.toString(); } finally { method.releaseConnection(); } return response.toString(); } /** * 执行一个带参数的HTTP POST请求,返回请求响应的JSON字符串 * * @param url 请求的URL地址 * @param map 请求的map参数 * @return 返回请求响应的JSON字符串 */ public static String doPost(String url, Map<String, Object> map) { // 构造HttpClient的实例 HttpClient httpClient = new HttpClient(); // 创建POST方法的实例 PostMethod method = new PostMethod(url); // 这个basicNameValue**放在List中 List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); // 创建basicNameValue***对象参数 if (map != null) { for (Map.Entry<String, Object> entry : map.entrySet()) { nameValuePairs.add(new NameValuePair(entry.getKey(), entry.getValue().toString())); } } // 填入各个表单域的值 NameValuePair[] param = nameValuePairs.toArray(new NameValuePair[nameValuePairs.size()]); method.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8"); // 将表单的值放入postMethod中 method.addParameters(param); try { // 执行postMethod int statusCode = httpClient.executeMethod(method); if (method.getStatusCode() == HttpStatus.SC_OK) { return StreamUtils.copyToString(method.getResponseBodyAsStream(), Charset.forName("utf-8")); } } catch (UnsupportedEncodingException e1) { logger.error(e1.getMessage()); } catch (IOException e) { logger.error("执行HTTP Post请求" + url + "时,发生异常!" + e.toString()); } finally { method.releaseConnection(); } return null; } /** * 执行一个HTTP POST请求,返回请求响应的HTML * * @param url 请求的URL地址 * @param reqStr 请求的查询参数,可以为null * @param charset 字符集 * @return 返回请求响应的HTML */ public static String doPost(String url, String reqStr, String contentType, String charset) { HttpClient client = new HttpClient(); PostMethod method = new PostMethod(url); try { HttpConnectionManagerParams managerParams = client .getHttpConnectionManager().getParams(); managerParams.setConnectionTimeout(30000); // 设置连接超时时间(单位毫秒) managerParams.setSoTimeout(30000); // 设置读数据超时时间(单位毫秒) method.setRequestEntity(new StringRequestEntity(reqStr, contentType, "utf-8")); client.executeMethod(method); logger.info("返回的状态码为" + method.getStatusCode()); if (method.getStatusCode() == HttpStatus.SC_OK) { return StreamUtils.copyToString(method.getResponseBodyAsStream(), Charset.forName(charset)); } } catch (UnsupportedEncodingException e1) { logger.error(e1.getMessage()); return ""; } catch (IOException e) { logger.error("执行HTTP Post请求" + url + "时,发生异常!" + e.toString()); return ""; } finally { method.releaseConnection(); } return null; } /** * @param url * @param entity * @return * @throws IOException */ public static String doPost(String url, HttpEntity entity) { //创建httpclient对象 CloseableHttpClient client = HttpClients.createSystem(); //创建post方式请求对象 HttpPost httpPost = new HttpPost(url); //设置参数到请求对象中 httpPost.setEntity(entity); BufferedReader reader = null; try { CloseableHttpResponse response = client.execute(httpPost); logger.info("Status:" + response.getStatusLine().getStatusCode()); if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); String inputLine; StringBuffer buffer = new StringBuffer(); while ((inputLine = reader.readLine()) != null) { buffer.append(inputLine); } reader.close(); return buffer.toString(); } } catch (IOException ex) { logger.info("执行http post请求出错,exception={}", ex.getMessage()); } finally { try { client.close(); } catch (IOException e) { e.printStackTrace(); } } return null; } }

注:

如果PostMethod提交的是中文字符,需要加上相应的编码格式: post.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=utf-8"); 
如果GetMethod提交的参数有中文字符,需要先转换成utf-8格式:String param = "enterpriseName="+ URLEncoder.encode("中国移动", "utf-8"); HttpUtil.doGet(param, url);

maven依赖说明
commons-httpclient 是 apache-commons 项目下的一个子项目,后来被 HttpComponents 取代,后者提供了更好的性能和更大的灵活性。

commons-httpclient的GAV地址为
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
</dependency>
其最新版本为3.1,且已经不再更新;


HttpComponents的GAV地址为
<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.5</version>
</dependency>

免责声明:文章转载自《org.apache.commons.httpclient工具类》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇LaTeX 中列表环境的使用心有 netty 一点通!下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

基于HttpClient实现网络爬虫~以百度新闻为例

转载请注明出处:http://blog.csdn.net/xiaojimanman/article/details/40891791       基于HttpClient4.5实现网络爬虫请訪问这里:http://blog.csdn.net/xiaojimanman/article/details/53178307       在曾经的工作中,实现过简...

java 如何在pdf中生成表格

1、目标   在pdf中生成一个可变表头的表格,并向其中填充数据。通过泛型动态的生成表头,通过反射动态获取实体类(我这里是User)的get方法动态获得数据,从而达到动态生成表格。   每天生成一个文件夹存储生成的pdf文件(文件夹的命名是年月日时间戳),如:20151110   生成的文件可能在毫秒级别,故文件的命名规则是"到毫秒的时间戳-uuid",如...

java反射知识点总结

一.java反射基础 1.1 什么叫java反射? 答:程序运行期间,动态的获取类的基本信息。比如:创建对象,调用类的方法,获得类的基本结构。这样给程序设计提供了很大的灵活性。个人总结就是:根据动态需求,生成动态的响应。java的Class类是java反射机制的基础,反射也是让虚拟机加载指定类。这就用到了java的类装载机制,jvm加载字节码文件,并生成c...

程序自动更新版本

增加了程序自动更新版本的功能,实现方式如下: 后台数据库中用一张表来保存程序的版本信息,该表的字段很简单,如下: CREATE TABLE [dbo].[sys_AutoUpdate]( [UID] [int] IDENTITY(1,1) NOT NULL, [SystemName] [varchar](50) NULL, [SystemVers...

带中文的字符串截取

最近在页面展示的时候遇到这样的场景,文字有可能超长,却又不允许换行。 当然,可以用高超的css来搞定。但如果你想要让多余的文字用“...”来代替,并且要兼容很多浏览器,这种时候用css也会很头疼吧。 1.C#对中文字符串的截取 与英文字符相比,我们把中文字符按两个占位来计算,对于带中文的字符串截取,要面临两个问题: 1.无法截取半个中文字符; 2.对于除...

pb常用函数(二)(转)

  GetFocus()功能确定当前焦点位于哪个控件上。语法GetFocus ( )返回值GraphicObject。函数执行成功时返回当前得到焦点控件的引用,发生错误时返回无效引用。用法应用程序利用IsValid()函数可以检测GetFocus()是否返回有效的控件引用。同时,使用TypeOf()函数可以确定控件的类型。Post()功能将指定消息加入到某...