Java HttpClient를 사용하여 HTTP 요청을 보내는 방법
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. 도구 클래스 사용
이 도구 클래스는 주소 표시줄 매개변수 가져오기, 매개변수 가져오기, 매개변수 전달을 포함하여 가져오기 요청 및 게시 요청에 대한 여러 매개변수 전달 방법을 작성했습니다. 게시물을 통한 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秒 /** * 可以访问 http://localhost:9005/yzhwsj/addPersonal/1/2 这样的接口 * @param url * @param headers * @param urlParam * @param timeout * @return */ 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; } /** * @param url * @param headers * @param params * @param timeout * @return */ 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; } /** * 调用http post请求(json数据) * * @param url * @param headers * @param json * @return */ 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; } /** * 调用http post请求 基础方法 * * @param url 请求的url * @param headers 请求头 * @param params 参数 * @param timeout 超时时间 * @return */ 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; } /** * 通过httpClient上传文件 * * @param url 请求的URL * @param headers 请求头参数 * @param path 文件路径 * @param fileName 文件名称 * @param timeout 超时时间 * @return */ 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; } } /** * 通过httpClient批量上传文件 * * @param url 请求的URL * @param headers 请求头参数 * @param params 参数 * @param paths 文件路径(key文件名称,value路径) * @param timeout 超时时间 * @return */ 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. 위의 도구 클래스를 확장하세요
. 메서드는 모두 토큰과 시간 초과를 전달합니다. 인터페이스를 사용하지 않는 경우 인터페이스를 확장할 수 있습니다. 예:
/** * 调用http get请求 * * @param url * @param params * @return */ public static String doGet(String url, Map<String, Object> params) { return doGet(url, null, params, null); }
put 요청 및 삭제 요청이 포함된 경우 요청을 생성할 때 다음과 같이 변경된다는 점을 제외하면 위와 유사합니다.
HttpDelete httpDelete = new HttpDelete(); HttpPut httpPut = new HttpPut();
위 내용은 Java HttpClient를 사용하여 HTTP 요청을 보내는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Java의 난수 생성기 안내. 여기서는 예제를 통해 Java의 함수와 예제를 통해 두 가지 다른 생성기에 대해 설명합니다.

Java의 Weka 가이드. 여기에서는 소개, weka java 사용 방법, 플랫폼 유형 및 장점을 예제와 함께 설명합니다.

Java의 Smith Number 가이드. 여기서는 정의, Java에서 스미스 번호를 확인하는 방법에 대해 논의합니다. 코드 구현의 예.

이 기사에서는 가장 많이 묻는 Java Spring 면접 질문과 자세한 답변을 보관했습니다. 그래야 면접에 합격할 수 있습니다.

Java 8은 스트림 API를 소개하여 데이터 컬렉션을 처리하는 강력하고 표현적인 방법을 제공합니다. 그러나 스트림을 사용할 때 일반적인 질문은 다음과 같은 것입니다. 기존 루프는 조기 중단 또는 반환을 허용하지만 스트림의 Foreach 메소드는이 방법을 직접 지원하지 않습니다. 이 기사는 이유를 설명하고 스트림 처리 시스템에서 조기 종료를 구현하기위한 대체 방법을 탐색합니다. 추가 읽기 : Java Stream API 개선 스트림 foreach를 이해하십시오 Foreach 메소드는 스트림의 각 요소에서 하나의 작업을 수행하는 터미널 작동입니다. 디자인 의도입니다

Java의 TimeStamp to Date 안내. 여기서는 소개와 예제와 함께 Java에서 타임스탬프를 날짜로 변환하는 방법에 대해서도 설명합니다.

캡슐은 3 차원 기하학적 그림이며, 양쪽 끝에 실린더와 반구로 구성됩니다. 캡슐의 부피는 실린더의 부피와 양쪽 끝에 반구의 부피를 첨가하여 계산할 수 있습니다. 이 튜토리얼은 다른 방법을 사용하여 Java에서 주어진 캡슐의 부피를 계산하는 방법에 대해 논의합니다. 캡슐 볼륨 공식 캡슐 볼륨에 대한 공식은 다음과 같습니다. 캡슐 부피 = 원통형 볼륨 2 반구 볼륨 안에, R : 반구의 반경. H : 실린더의 높이 (반구 제외). 예 1 입력하다 반경 = 5 단위 높이 = 10 단위 산출 볼륨 = 1570.8 입방 단위 설명하다 공식을 사용하여 볼륨 계산 : 부피 = π × r2 × h (4
