httpclient封装post请求和get的请求
在我们程序员生涯中,经常要复用代码,所以我们应该养成时常整理代码的好习惯,以下是我之前封装的
httpclient的post和get请求所用的代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 |
package com.marco.common; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.URI; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map;
import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.NameValuePair; import org.apache.http.StatusLine; import org.apache.http.client.HttpClient; 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.DefaultHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicNameValuePair; import org.apache.http.protocol.HTTP; import org.apache.http.util.EntityUtils; import org.apache.log4j.Logger; /** * @author 马弦 * @date 2017年10月23日 下午2:49 * HttpClient工具类 */ public class HttpUtil {
private static Logger logger = Logger.getLogger(HttpUtil. class );
/** * get请求 * @return */ public static String doGet(String url) { try { HttpClient client = new DefaultHttpClient(); //发送get请求 HttpGet request = new HttpGet(url); HttpResponse response = client.execute(request);
/**请求发送成功,并得到响应**/ if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { /**读取服务器返回过来的json字符串数据**/ String strResult = EntityUtils.toString(response.getEntity());
return strResult; } } catch (IOException e) { e.printStackTrace(); }
return null ; }
/** * post请求(用于key-value格式的参数) * @param url * @param params * @return */ public static String doPost(String url, Map params){
BufferedReader in = null ; try { // 定义HttpClient HttpClient client = new DefaultHttpClient(); // 实例化HTTP方法 HttpPost request = new HttpPost(); request.setURI( new URI(url));
//设置参数 List<NameValuePair> nvps = new ArrayList<NameValuePair>(); for (Iterator iter = params.keySet().iterator(); iter.hasNext();) { String name = (String) iter.next(); String value = String.valueOf(params.get(name)); nvps.add( new BasicNameValuePair(name, value));
//System.out.println(name +"-"+value); } request.setEntity( new UrlEncodedFormEntity(nvps,HTTP.UTF_8));
HttpResponse response = client.execute(request); int code = response.getStatusLine().getStatusCode(); if (code == 200 ){ //请求成功 in = new BufferedReader( new InputStreamReader(response.getEntity() .getContent(), "utf-8" )); StringBuffer sb = new StringBuffer( "" ); String line = "" ; String NL = System.getProperty( "line.separator" ); while ((line = in.readLine()) != null ) { sb.append(line + NL); }
in.close();
return sb.toString(); } else { // System.out.println( "状态码:" + code); return null ; } } catch (Exception e){ e.printStackTrace();
return null ; } }
/** * post请求(用于请求json格式的参数) * @param url * @param params * @return */ public static String doPost(String url, String params) throws Exception {
CloseableHttpClient httpclient = HttpClients.createDefault(); HttpPost httpPost = new HttpPost(url); // 创建httpPost httpPost.setHeader( "Accept" , "application/json" ); httpPost.setHeader( "Content-Type" , "application/json" ); String charSet = "UTF-8" ; StringEntity entity = new StringEntity(params, charSet); httpPost.setEntity(entity); CloseableHttpResponse response = null ;
try {
response = httpclient.execute(httpPost); StatusLine status = response.getStatusLine(); int state = status.getStatusCode(); if (state == HttpStatus.SC_OK) { HttpEntity responseEntity = response.getEntity(); String jsonString = EntityUtils.toString(responseEntity); return jsonString; } else { logger.error( "请求返回:" +state+ "(" +url+ ")" ); } } finally { if (response != null ) { try { response.close(); } catch (IOException e) { e.printStackTrace(); } } try { httpclient.close(); } catch (IOException e) { e.printStackTrace(); } } return null ; } } |
httpclient是一个非常常用的工具,在项目开发的时候,经常需要请求第三方的接口,我整理好了这段代码,以后回头找的时候就方便啦!
HttpClient发送Get、Post请求的实践
1. 配置及实例化HttpClient
1 2 3 4 5 6 |
private static final CloseableHttpClient httpclient; public static final String CHARSET = "UTF-8" ; static { RequestConfig config = RequestConfig.custom().setConnectTimeout( 5000 ).setSocketTimeout( 3000 ).build(); httpclient = HttpClientBuilder.create().setDefaultRequestConfig(config).build(); } |
2. 发送Get请求方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
/** * HTTP Get 获取内容 * @param url请求的url地址 ?之前的地址 * @param params请求的参数 * @param charset编码格式 * @return 页面内容 */ public static String sendGet(String url, Map<String, Object> params) throws ParseException, UnsupportedEncodingException, IOException{ if (params != null && !params.isEmpty()){ List<NameValuePair> pairs = new ArrayList<NameValuePair>(params.size()); for (String key :params.keySet()){ pairs.add( new BasicNameValuePair(key, params.get(key).toString())); } url += "?" +EntityUtils.toString( new UrlEncodedFormEntity(pairs), CHARSET); }
HttpGet httpGet = new HttpGet(url); CloseableHttpResponse response = httpclient.execute(httpGet); int statusCode = response.getStatusLine().getStatusCode(); if (statusCode != 200 ){ httpGet.abort(); throw new RuntimeException( "HttpClient,error status code :" + statusCode); } HttpEntity entity = response.getEntity(); String result = null ; if (entity != null ) { result = EntityUtils.toString(entity, "utf-8" ); EntityUtils.consume(entity); response.close(); return result; } else { return null ; } } |
3. 发送Post请求方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
/** * HTTP Post 获取内容 * @param url请求的url地址 ?之前的地址 * @param params请求的参数 * @param charset编码格式 * @return 页面内容 * @throws IOException * @throws ClientProtocolException */
public static String sendPost(String url, Map<String, Object> params) throws ClientProtocolException, IOException { List<NameValuePair> pairs = null ; if (params != null && !params.isEmpty()) { pairs = new ArrayList<NameValuePair>(params.size()); for (String key : params.keySet()) { pairs.add( new BasicNameValuePair(key, params.get(key).toString())); } } HttpPost httpPost = new HttpPost(url); if (pairs != null && pairs.size() > 0 ) { httpPost.setEntity( new UrlEncodedFormEntity(pairs, CHARSET)); } CloseableHttpResponse response = httpclient.execute(httpPost); int statusCode = response.getStatusLine().getStatusCode(); if (statusCode != 200 ) { httpPost.abort(); throw new RuntimeException( "HttpClient,error status code :" + statusCode); } HttpEntity entity = response.getEntity(); String result = null ; if (entity != null ) { result = EntityUtils.toString(entity, "utf-8" ); EntityUtils.consume(entity); response.close(); return result; } else { return null ; } } |
4. 编写测试用例,进行Get 、Post请求方法的测试
4.1 测试Get方法,e .g:
1 2 3 4 5 6 7 8 |
@Test public void testGet() throws ParseException, UnsupportedEncodingException, IOException { String testUrl01 = "具体的测试接口地址" ; Map<String, Object> params01 = new HashMap<>(); params01.put( "参数01" , "对应的参数取值" ); params01.put( "参数02" , "对应的参数取值" ); System.out.println(sendGet(testUrl01, params01)); } |
4.2 测试Post方法,e.g:
1 2 3 4 5 6 7 8 |
@Test public void testPost() throws ClientProtocolException, IOException { String testUrl02 = "具体的测试接口地址" ; Map<String, Object> params02 = new HashMap<>(); params02.put( "参数01" , "对应的参数取值" ); params02.put( "参数02" , "对应的参数取值" ); System.out.println(sendPost(testUrl02, params02)); } |
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
原文链接:https://blog.csdn.net/qq9808/article/details/78320816
查看更多关于java中httpclient封装post请求和get的请求实例的详细内容...