Apache HttpClient发送HttpGet请求
来源:互联网 发布:修仙女配之随身淘宝店 编辑:程序博客网 时间:2024/04/29 11:08
利用Apache Http Client模拟发送Http请求,并获取返回结果,注意版本区分。
/** * */package com.xxx.httputil;import java.io.IOException;import java.io.UnsupportedEncodingException;import java.net.URI;import java.net.URISyntaxException;import java.nio.charset.Charset;import java.util.List;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.HttpStatus;import org.apache.http.NameValuePair;import org.apache.http.ParseException;import org.apache.http.client.HttpClient;import org.apache.http.client.entity.UrlEncodedFormEntity;import org.apache.http.client.methods.HttpGet;import org.apache.http.client.methods.HttpPost;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.params.CoreConnectionPNames;import org.apache.http.util.EntityUtils;import com.xxx.pojo.MyHttpResponse;/** * 项目名称:xxx * * @description: * * @author Wind-spg * * @create_time:2014年12月2日 下午2:29:41 * * @version V1.0.0 * */public class MyHttpUtil{ private static final Log LOGGER = LogFactory.getLog(MyHttpUtil.class); /** * @description: httpget请求 * @author: Wind-spg * @param url * @param params * @param connectionTimeout * {@link org.apache.http.params.CoreConnectionPNames#CONNECTION_TIMEOUT} * @param soTimeout * {@link org.apache.http.params.CoreConnectionPNames#SO_TIMEOUT} * @return * @throws URISyntaxException * @throws IOException */ public static MyHttpResponse doHttpGet(String url, List<NameValuePair> params, int connectionTimeout, int soTimeout) throws URISyntaxException, IOException { LOGGER.debug(String.format("enter function, %s, %s", url, params)); LOGGER.info(String.format("do http get start:%s", System.currentTimeMillis())); // for version 4.3+ // HttpClientBuilder httpClientBuilder = HttpClientBuilder.create(); // CloseableHttpClient httpClient = httpClientBuilder.build(); HttpClient httpClient = new DefaultHttpClient(); // 连接时间 httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, connectionTimeout); // 数据传输时间 httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, soTimeout); // Get请求 HttpGet httpget = new HttpGet(url); try { // for version 4.3+ 设置请求和传输超时时间 // RequestConfig requestConfig = // RequestConfig.custom().setSocketTimeout(2000) // .setConnectTimeout(2000).build(); // httpget.setConfig(requestConfig); // 设置参数 String str = EntityUtils.toString(new UrlEncodedFormEntity(params, Charset.forName("UTF-8"))); httpget.setURI(new URI(httpget.getURI().toString() + "?" + str)); // 发送请求 HttpResponse httpResponse = httpClient.execute(httpget); int statusCode = httpResponse.getStatusLine().getStatusCode(); if (statusCode != HttpStatus.SC_OK) { LOGGER.error("Method failed:" + httpResponse.getStatusLine()); } // 获取返回数据 HttpEntity entity = httpResponse.getEntity(); String body = EntityUtils.toString(entity, Charset.forName("UTF-8")); if (entity != null) { EntityUtils.consume(entity); } LOGGER.info(String.format("do http get end:%s", System.currentTimeMillis())); LOGGER.debug(String.format("http get response:%s", body)); return new MyHttpResponse(statusCode, body, httpget.getURI().toString()); } catch (ParseException e) { LOGGER.error("do http get error!", e); throw e; } catch (UnsupportedEncodingException e) { LOGGER.error("do http get error!", e); throw e; } catch (IOException e) { LOGGER.error("do http get error!", e); throw e; } catch (URISyntaxException e) { LOGGER.error("do http get error!", e); throw e; } finally { // try // { // // for 4.3+ // httpClient.close(); // } catch (IOException e) // { // LOGGER.error("close httpclient error!", e); // } httpget.releaseConnection(); httpClient.getConnectionManager().shutdown(); } } /** * @description: 发送httpPost请求 * @author: Wind-spg * @param url * @param params * @param connectionTimeout * {@link org.apache.http.params.CoreConnectionPNames#CONNECTION_TIMEOUT} * @param soTimeout * {@link org.apache.http.params.CoreConnectionPNames#SO_TIMEOUT} * @return * @throws IOException */ public static MyHttpResponse doHttpPost(String url, List<NameValuePair> params, int connectionTimeout, int soTimeout) throws IOException { LOGGER.debug(String.format("enter function, %s, %s", url, params)); // // 创建HttpClientBuilder // HttpClientBuilder httpClientBuilder = HttpClientBuilder.create(); // // HttpClient // CloseableHttpClient client = httpClientBuilder.build(); LOGGER.info(String.format("do http post start:%s", System.currentTimeMillis())); // 直接创建client // for version4.3+ // CloseableHttpClient client = HttpClients.createDefault(); HttpClient httpClient = new DefaultHttpClient(); // 连接时间 httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, connectionTimeout); // 数据传输时间 httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, soTimeout); HttpPost httpPost = new HttpPost(url); UrlEncodedFormEntity postEntity = new UrlEncodedFormEntity(params, Charset.forName("UTF-8")); httpPost.setEntity(postEntity); LOGGER.debug(String.format("request line:%s", httpPost.getRequestLine())); try { // 执行post请求 HttpResponse httpResponse = httpClient.execute(httpPost); int statusCode = httpResponse.getStatusLine().getStatusCode(); if (statusCode != HttpStatus.SC_OK) { LOGGER.error("Method failed:" + httpResponse.getStatusLine()); } HttpEntity entity = httpResponse.getEntity(); String result = EntityUtils.toString(entity, Charset.forName("UTF-8")); if (entity != null) { EntityUtils.consume(entity); } LOGGER.debug(String.format("http post response:%s", result)); LOGGER.info(String.format("do http post end:%s", System.currentTimeMillis())); return new MyHttpResponse(statusCode, result, httpPost.getURI().toString()); } catch (IOException e) { LOGGER.error("do http post error!", e); throw e; } finally { // try // { // // 关闭流并释放资源,for version4.3+ // client.close(); // } catch (IOException e) // { // LOGGER.error("close httpclient error!", e); // } httpPost.releaseConnection(); httpClient.getConnectionManager().shutdown(); } }}
MyHttpResponse
/** * */package com.xxx.pojo;import java.io.Serializable;/** * 项目名称:xxx * * @description: * * @author Wind-spg * * @create_time:2014年12月12日 上午9:41:58 * * @version V1.0.0 * */public class MyHttpResponse implements Serializable{ /** * {变量说明} */ private static final long serialVersionUID = 6381662550803520971L; // private static final Log LOGGER = LogFactory.getLog(MyHttpResponse.class); private int responseStatus; private String responseBody; private String requetUrl; public MyHttpResponse() { } public MyHttpResponse(int resonseStatus, String responseBody) { this.responseStatus = resonseStatus; this.responseBody = responseBody; } public MyHttpResponse(int resonseStatus, String responseBody, String requestUrl) { this.responseStatus = resonseStatus; this.responseBody = responseBody; this.requetUrl = requestUrl; } public int getResponseStatus() { return responseStatus; } public void setResponseStatus(int responseStatus) { this.responseStatus = responseStatus; } public String getResponseBody() { return responseBody; } public void setResponseBody(String responseBody) { this.responseBody = responseBody; } public String getRequetUrl() { return requetUrl; } public void setRequetUrl(String requetUrl) { this.requetUrl = requetUrl; } @Override public String toString() { return "MyHttpResponse [responseStatus=" + responseStatus + ", responseBody=" + responseBody + ", requetUrl=" + requetUrl + "]"; }}
附:如何正确关闭你的http请求链接,并释放资源
http://seanhe.iteye.com/blog/234759
0 1
- Apache HttpClient发送HttpGet请求
- 利用HTTPClient模块中HttpGet和HttpPost 发送接口请求
- android使用apache httpclient发送post请求
- 使用Apache HttpClient发送get、post请求
- apache httpclient 连接 IIB,发送XML请求
- 使用apache HttpClient发送Http请求
- HttpClient的HttpGet请求乱码问题解决
- 用HttpGet和HttpClient网路请求数据
- Java的HttpClient、HttpGet和HttpPost请求
- Java用apache的HttpClient发送Post请求
- Android使用Apache HttpClient发送GET、POST请求
- HttpClient发送http请求(apache httpcomponents包)
- HttpClient发送http请求(apache common包)
- 使用Apache提供的HttpClient发送https请求
- JAVA通过java.net发送httpGet请求
- HttpClient,HttpGet
- Httpclient发送POST请求
- HttpClient发送请求
- 关于矩阵最通俗的解释-超级经典zz
- Add Two Numbers
- ISAG webservice接口发送彩信附件
- UIView
- 有关于IE6双倍边距的解决办法
- Apache HttpClient发送HttpGet请求
- ORACLE EBS常用表查询语句
- 方法连续调用的实现
- freemarker 常见语法
- Exposing a Resource for Remote Management By JConsole 通过JConsole为远程管理公开资源
- ProtoBuff语言指南
- android 4.4电池分析、4.3电池分析 android4.4电池管理
- shell 执行数学运算
- ORACLE EBS常用表及查询语句(最终整理版)