httpclient 封装 http(get put post delete)请求
Posted aizj
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了httpclient 封装 http(get put post delete)请求相关的知识,希望对你有一定的参考价值。
@SuppressWarnings("deprecation") public class HttpClientUtil { private static Logger logger = LoggerFactory.getLogger(HttpClientUtil.class); private static final String ContentEncoding = "UTF-8"; private static final int SocketTimeout = 5000; /** httpClient的get请求方式 * @return * @throws Exception */ public static String doGet(String url) { logger.info("get请求{}",url); /* * 使用 GetMethod 来访问一个 URL 对应的网页,实现步骤: * 1:生成一个 HttpClinet 对象并设置相应的参数。 * 2:生成一个 GetMethod 对象并设置响应的参数。 * 3:用 HttpClinet 生成的对象来执行 GetMethod 生成的Get方法。 * 4:处理响应状态码。 * 5:若响应正常,处理 HTTP 响应内容。 * 6:释放连接。 */ /* 1 生成 HttpClinet 对象并设置参数 */ HttpClient httpClient = new HttpClient(); // 设置 Http 连接超时为5秒 httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(SocketTimeout); /* 2 生成 GetMethod 对象并设置参数 */ GetMethod getMethod = new GetMethod(url); // 设置 get 请求超时为 5 秒 getMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, SocketTimeout); // 设置请求重试处理,用的是默认的重试处理:请求三次 getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler()); String response = ""; /* 3 执行 HTTP GET 请求 */ try { int statusCode = httpClient.executeMethod(getMethod); logger.info("get请求{}",statusCode); /* 4 判断访问的状态码 */ if (statusCode != HttpStatus.SC_OK&&statusCode != HttpStatus.SC_CREATED&&statusCode != HttpStatus.SC_NO_CONTENT) { logger.error("请求出错: "+ getMethod.getStatusLine()); return response; } // 读取 HTTP 响应内容,这里简单打印网页内容 byte[] responseBody = getMethod.getResponseBody();// 读取为字节数组 response = new String(responseBody, ContentEncoding); logger.info("----------response:" + response); // 读取为 InputStream,在网页内容数据量大时候推荐使用 // InputStream response = getMethod.getResponseBodyAsStream(); } catch (HttpException e) { // 发生致命的异常,可能是协议不对或者返回的内容有问题 logger.error("请检查输入的URL!"); e.printStackTrace(); } catch (IOException e) { // 发生网络异常 logger.error("发生网络异常!"); e.printStackTrace(); } finally { /* 6 .释放连接 */ getMethod.releaseConnection(); } return response; } /** * HttpClient PUT请求 * @author huang * @date 2013-4-10 * @return */ public static String doPut(String uri,String jsonObj){ logger.info("put请求{},{}",uri,jsonObj); String resStr = ""; HttpClient htpClient = new HttpClient(); PutMethod putMethod = new PutMethod(uri); putMethod.addRequestHeader( "Content-Type","application/json" ); putMethod.getParams().setParameter( HttpMethodParams.HTTP_CONTENT_CHARSET, ContentEncoding ); putMethod.setRequestBody( jsonObj ); try{ int statusCode = htpClient.executeMethod( putMethod ); logger.info("put请求{}",statusCode); if (statusCode != HttpStatus.SC_OK&&statusCode != HttpStatus.SC_CREATED&&statusCode != HttpStatus.SC_NO_CONTENT) { logger.error("Method failed: "+putMethod.getStatusLine() ); return resStr; } byte[] responseBody = putMethod.getResponseBody(); resStr = new String(responseBody,ContentEncoding); logger.info("response:" + resStr); }catch(Exception e){ logger.error(" failed: " + e.getMessage()); e.printStackTrace(); }finally{ putMethod.releaseConnection(); } return resStr; } /** * post请求 * @param url * @param jsonObj * @return */ @SuppressWarnings({ "resource" }) public static String doPost(String url,String jsonObj){ logger.info("post请求{},{}",url,jsonObj); DefaultHttpClient client = new DefaultHttpClient(); HttpPost post = new HttpPost(url); post.setHeader("Content-Type", "application/json; charset=UTF-8"); String response = ""; try { StringEntity stringEntity = new StringEntity( jsonObj,"UTF-8"); stringEntity.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json")); post.setEntity(stringEntity); HttpResponse res = client.execute(post); int statusCode=res.getStatusLine().getStatusCode(); logger.info("post请求",statusCode); if (statusCode != HttpStatus.SC_OK&&statusCode != HttpStatus.SC_CREATED&&statusCode != HttpStatus.SC_NO_CONTENT) { logger.error("Method failed: "+res.getStatusLine() ); return response; } response = EntityUtils.toString(res.getEntity());// 返回json格式: logger.info("----------response:" + response); } catch (Exception e) { logger.error(" failed: " + e.getMessage()); e.printStackTrace(); } return response; } public static String doDelete(String uri) { logger.info("delete请求",uri); String data= ""; HttpClient httpClient= new HttpClient(); httpClient.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, ContentEncoding); DeleteMethod method = null; try{ method= new DeleteMethod(); method.setURI(new URI(uri,false)); method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler()); method.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, SocketTimeout); int statusCode = httpClient.executeMethod(method); logger.info("delete请求",statusCode); if (statusCode != HttpStatus.SC_OK&&statusCode != HttpStatus.SC_CREATED&&statusCode != HttpStatus.SC_NO_CONTENT) { logger.error("Method failed: " + method.getStatusLine()); return data; } data= new String(method.getResponseBody(),ContentEncoding); logger.info("response:" + data); }catch(HttpException e){ e.printStackTrace(); logger.error("Please check your provided http address!"); }catch(IOException e){ e.printStackTrace(); logger.error(e.getMessage()); }catch(Exception e){ e.printStackTrace(); logger.error(e.getMessage()); }finally{ if(method!=null) method.releaseConnection(); } return data; } public static void main(String args[]) { } }
以上是关于httpclient 封装 http(get put post delete)请求的主要内容,如果未能解决你的问题,请参考以下文章
1. 通过apache common封装好的HttpClient