Java HttpClient怎么使用
短信预约 -IT技能 免费直播动态提醒
今天小编给大家分享一下Java HttpClient怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
1、导入依赖
<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.3</version></dependency><dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.58</version></dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpmime</artifactId> <version>4.5.3</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpcore</artifactId> <version>4.4.13</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.7</version></dependency>
2、使用工具类
该工具类将get请求和post请求当中几种传参方式都写了,其中有get地址栏传参、get的params传参、post的params传参、post的json传参。
import com.alibaba.fastjson.JSONObject;import org.apache.http.Consts;import org.apache.http.HttpEntity;import org.apache.http.HttpStatus;import org.apache.http.NameValuePair;import org.apache.http.client.ClientProtocolException;import org.apache.http.client.config.RequestConfig;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.client.utils.URIBuilder;import org.apache.http.entity.ContentType;import org.apache.http.entity.StringEntity;import org.apache.http.entity.mime.HttpMultipartMode;import org.apache.http.entity.mime.MultipartEntityBuilder;import org.apache.http.impl.client.CloseableHttpClient;import org.apache.http.impl.client.HttpClients;import org.apache.http.message.BasicNameValuePair;import org.apache.http.util.EntityUtils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.io.*;import java.net.URI;import java.net.URISyntaxException;import java.nio.charset.Charset;import java.util.ArrayList;import java.util.List;import java.util.Map;public class HttpClientUtil { private static Logger logger = LoggerFactory.getLogger(HttpClientUtil.class); private static final int DEFULT_TIMEOUT = 30 * 1000;//默认超时时间20秒 private static String doUrlGet(String url, Map<String, String> headers, List<String> urlParam, Integer timeout) { //创建httpClient对象 CloseableHttpClient httpClient = HttpClients.createDefault(); String resultString = null; CloseableHttpResponse response = null; try { //创建uri if (urlParam != null){ for (String param : urlParam) { url = url + "/" + param; } } //创建hTTP get请求 HttpGet httpGet = new HttpGet(url); //设置超时时间 int timeoutTmp = DEFULT_TIMEOUT; if (timeout != null) { timeoutTmp = timeout; } RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(timeoutTmp) .setConnectionRequestTimeout(timeoutTmp).setSocketTimeout(timeoutTmp).build(); httpGet.setConfig(requestConfig); //设置头信息 if (null != headers) { for (String key : headers.keySet()) { httpGet.setHeader(key, headers.get(key)); } } //执行请求 response = httpClient.execute(httpGet); if (HttpStatus.SC_OK == response.getStatusLine().getStatusCode()) { resultString = EntityUtils.toString(response.getEntity(), Consts.UTF_8); } } catch (IOException e) { logger.error("http调用异常" + e.toString(), e); } finally { try { if (null != response) { response.close(); } } catch (IOException e) { logger.error("response关闭异常" + e.toString(), e); } try { if (null != httpClient) { httpClient.close(); } } catch (IOException e) { logger.error("httpClient关闭异常" + e.toString(), e); } } return resultString; } private static String doGet(String url, Map<String, String> headers, Map<String, Object> params, Integer timeout) { //创建httpClient对象 CloseableHttpClient httpClient = HttpClients.createDefault(); String resultString = null; CloseableHttpResponse response = null; try { // 1.创建uri URIBuilder builder = new URIBuilder(url); if (params != null) { //uri添加参数 for (String key : params.keySet()) { builder.addParameter(key, String.valueOf(params.get(key))); } } URI uri = builder.build(); // 2.创建hTTP get请求 HttpGet httpGet = new HttpGet(uri); // 3.设置超时时间 int timeoutTmp = DEFULT_TIMEOUT; if (timeout != null) { timeoutTmp = timeout; } RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(timeoutTmp) .setConnectionRequestTimeout(timeoutTmp).setSocketTimeout(timeoutTmp).build(); httpGet.setConfig(requestConfig); // 4.设置头信息 if (null != headers) { for (String key : headers.keySet()) { httpGet.setHeader(key, headers.get(key)); } } // 5.执行请求 response = httpClient.execute(httpGet); if (HttpStatus.SC_OK == response.getStatusLine().getStatusCode()) { resultString = EntityUtils.toString(response.getEntity(), Consts.UTF_8); } } catch (URISyntaxException e) { logger.error("http调用异常" + e.toString(), e); } catch (IOException e) { logger.error("http调用异常" + e.toString(), e); } finally { try { if (null != response) { response.close(); } } catch (IOException e) { logger.error("response关闭异常" + e.toString(), e); } try { if (null != httpClient) { httpClient.close(); } } catch (IOException e) { logger.error("httpClient关闭异常" + e.toString(), e); } } return resultString; } public static String doJsonPost(String url, Map<String, String> headers, JSONObject json, Integer timeout) { CloseableHttpClient httpClient = HttpClients.createDefault(); CloseableHttpResponse response = null; String resultString = ""; try { // 1.创建http post请求 HttpPost httpPost = new HttpPost(url); // 2.设置超时时间 int timeoutTmp = DEFULT_TIMEOUT; if (timeout != null) { timeoutTmp = timeout; } RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(timeoutTmp) .setConnectionRequestTimeout(timeoutTmp).setSocketTimeout(timeoutTmp).build(); httpPost.setConfig(requestConfig); // 3.设置参数信息 StringEntity s = new StringEntity(json.toString(), Consts.UTF_8); // 发送json数据需要设置的contentType s.setContentType("application/json"); httpPost.setEntity(s); // 4.设置头信息 if (headers != null) { for (String key : headers.keySet()) { httpPost.setHeader(key, headers.get(key)); } } // 5.执行http请求 response = httpClient.execute(httpPost); if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { resultString = EntityUtils.toString(response.getEntity(), Consts.UTF_8); } } catch (UnsupportedEncodingException e) { logger.error("调用http异常" + e.toString(), e); } catch (ClientProtocolException e) { logger.error("调用http异常" + e.toString(), e); } catch (IOException e) { logger.error("调用http异常" + e.toString(), e); } finally { try { if (null != response) { response.close(); } } catch (IOException e) { logger.error("关闭response异常" + e.toString(), e); } try { if (null != httpClient) { httpClient.close(); } } catch (IOException e) { logger.error("关闭httpClient异常" + e.toString(), e); } } return resultString; } public static String doPost(String url, Map<String, String> headers, Map<String, Object> params, Integer timeout) { CloseableHttpClient httpClient = HttpClients.createDefault(); CloseableHttpResponse response = null; String resultString = ""; try { // 1.创建http post请求 HttpPost httpPost = new HttpPost(url); // 2.设置超时时间 int timeoutTmp = DEFULT_TIMEOUT; if (timeout != null) { timeoutTmp = timeout; } RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(timeoutTmp) .setConnectionRequestTimeout(timeoutTmp).setSocketTimeout(timeoutTmp).build(); httpPost.setConfig(requestConfig); // 3.设置参数信息 if (params != null) { List<NameValuePair> paramList = new ArrayList<>(); for (String key : params.keySet()) { paramList.add(new BasicNameValuePair(key, String.valueOf(params.get(key)))); } // 模拟表单 UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList, Consts.UTF_8); httpPost.setEntity(entity); } // 4.设置头信息 if (headers != null) { for (String key : headers.keySet()) { httpPost.setHeader(key, headers.get(key)); } } // 5.执行http请求 response = httpClient.execute(httpPost); if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { resultString = EntityUtils.toString(response.getEntity(), Consts.UTF_8); } } catch (UnsupportedEncodingException e) { logger.error("调用http异常" + e.toString(), e); } catch (ClientProtocolException e) { logger.error("调用http异常" + e.toString(), e); } catch (IOException e) { logger.error("调用http异常" + e.toString(), e); } finally { try { if (null != response) { response.close(); } } catch (IOException e) { logger.error("关闭response异常" + e.toString(), e); } try { if (null != httpClient) { httpClient.close(); } } catch (IOException e) { logger.error("关闭httpClient异常" + e.toString(), e); } } return resultString; } public static String UploadFileByHttpClient(String url, Map<String, String> headers, String path, String fileName, Integer timeout) { String resultString = ""; CloseableHttpClient httpClient = HttpClients.createDefault(); CloseableHttpResponse response = null; InputStream content = null; BufferedReader in = null; try { // 1.创建http post请求 HttpPost httpPost = new HttpPost(url); // 2.设置超时时间 int timeoutTmp = DEFULT_TIMEOUT; if (timeout != null) { timeoutTmp = timeout; } RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(timeoutTmp) .setConnectionRequestTimeout(timeoutTmp).setSocketTimeout(timeoutTmp).build(); httpPost.setConfig(requestConfig); // 3.设置参数信息 // HttpMultipartMode.RFC6532参数的设定是为避免文件名为中文时乱码 MultipartEntityBuilder builder = MultipartEntityBuilder.create().setMode(HttpMultipartMode.RFC6532); // 上传文件的路径 File file = new File(path + File.separator + fileName); builder.setCharset(Charset.forName("UTF-8")); builder.addBinaryBody("file", file, ContentType.MULTIPART_FORM_DATA, fileName); HttpEntity entity = builder.build(); httpPost.setEntity(entity); // 4.设置头信息 if (headers != null) { for (String key : headers.keySet()) { httpPost.setHeader(key, headers.get(key)); } } // 5.执行http请求 response = httpClient.execute(httpPost); if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { resultString = EntityUtils.toString(response.getEntity(), Consts.UTF_8); } } catch (Exception e) { logger.error("上传文件失败:", e); } finally { try { if (null != httpClient) { httpClient.close(); } } catch (IOException e) { logger.error("关闭httpClient异常" + e.toString(), e); } try { if (null != content) { content.close(); } } catch (IOException e) { logger.error("关闭content异常" + e.toString(), e); } try { if (null != in) { in.close(); } } catch (IOException e) { logger.error("关闭in异常" + e.toString(), e); } } return resultString; } } public static String UploadFilesByHttpClient(String url, Map<String, String> headers, Map<String, String> params, Map<String, String> paths, Integer timeout) { String resultString = ""; CloseableHttpClient httpClient = HttpClients.createDefault(); CloseableHttpResponse response = null; InputStream content = null; BufferedReader in = null; try { // 1.创建http post请求 HttpPost httpPost = new HttpPost(url); // 2.设置超时时间 int timeoutTmp = DEFULT_TIMEOUT; if (timeout != null) { timeoutTmp = timeout; } RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(timeoutTmp) .setConnectionRequestTimeout(timeoutTmp).setSocketTimeout(timeoutTmp).build(); httpPost.setConfig(requestConfig); // 3.设置文件信息 // HttpMultipartMode.RFC6532参数的设定是为避免文件名为中文时乱码 MultipartEntityBuilder builder = MultipartEntityBuilder.create().setMode(HttpMultipartMode.RFC6532); builder.setCharset(Charset.forName("UTF-8")); // 上传文件的路径 for (Map.Entry<String, String> m : paths.entrySet()) { File file = new File(m.getValue() + File.separator + m.getKey()); builder.addBinaryBody("files", file, ContentType.MULTIPART_FORM_DATA, m.getKey()); } // 4.设置参数信息 ContentType contentType = ContentType.create("text/plain", Charset.forName("UTF-8")); for (Map.Entry<String, String> param : params.entrySet()) { builder.addTextBody(param.getKey(), param.getValue(), contentType); } HttpEntity entity = builder.build(); httpPost.setEntity(entity); // 5.设置头信息 if (headers != null) { for (String key : headers.keySet()) { httpPost.setHeader(key, headers.get(key)); } } // 6.执行http请求 response = httpClient.execute(httpPost); if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { resultString = EntityUtils.toString(response.getEntity(), Consts.UTF_8); } } catch (Exception e) { logger.error("上传文件失败:", e); } finally { try { if (null != httpClient) { httpClient.close(); } } catch (IOException e) { logger.error("关闭httpClient异常" + e.toString(), e); } try { if (null != content) { content.close(); } } catch (IOException e) { logger.error("关闭content异常" + e.toString(), e); } try { if (null != in) { in.close(); } } catch (IOException e) { logger.error("关闭in异常" + e.toString(), e); } } return resultString; }
3、扩展
上面的工具类,方法都携带了token和超时时间,假如接口用不到可以做接口拓展。例如:
public static String doGet(String url, Map<String, Object> params) { return doGet(url, null, params, null);}
如果涉及到put请求和delete请求,跟上面都差不多,只不过创建请求的时候改为:
HttpDelete httpDelete = new HttpDelete();HttpPut httpPut = new HttpPut();
以上就是“Java HttpClient怎么使用”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341