JAVA에서 HTTP 요청을 보내는 방법은 무엇입니까?
1. HttpURLConnection
JDK에서 제공하는 net을 사용하세요. 다른 jar 패키지는 필요하지 않습니다. 코드는 다음과 같습니다.
import com.alibaba.fastjson.JSON; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import java.util.HashMap; import java.util.Map; public class HttpTest1 { public static void main(String[] args) { HttpURLConnection con = null; BufferedReader buffer = null; StringBuffer resultBuffer = null; try { URL url = new URL("http://10.30.10.151:8012/gateway.do"); //得到连接对象 con = (HttpURLConnection) url.openConnection(); //设置请求类型 con.setRequestMethod("POST"); //设置Content-Type,此处根据实际情况确定 con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); //允许写出 con.setDoOutput(true); //允许读入 con.setDoInput(true); //不使用缓存 con.setUseCaches(false); OutputStream os = con.getOutputStream(); Map paraMap = new HashMap(); paraMap.put("type", "wx"); paraMap.put("mchid", "10101"); //组装入参 os.write(("consumerAppId=test&serviceName=queryMerchantService¶ms=" + JSON.toJSONString(paraMap)).getBytes()); //得到响应码 int responseCode = con.getResponseCode(); if (responseCode == HttpURLConnection.HTTP_OK) { //得到响应流 InputStream inputStream = con.getInputStream(); //将响应流转换成字符串 resultBuffer = new StringBuffer(); String line; buffer = new BufferedReader(new InputStreamReader(inputStream, "GBK")); while ((line = buffer.readLine()) != null) { resultBuffer.append(line); } System.out.println("result:" + resultBuffer.toString()); } } catch (Exception e) { e.printStackTrace(); } } }
2. HttpClient
에는 commons-httpclient-3.1.jar이 필요하며, Maven 종속성은 다음과 같습니다. :
<dependency> <groupId>commons-httpclient</groupId> <artifactId>commons-httpclient</artifactId> <version>3.1</version> </dependency>
코드는 다음과 같습니다.
import com.alibaba.fastjson.JSON; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.methods.PostMethod; import java.io.IOException; import java.util.HashMap; import java.util.Map; public class HttpTest2 { public static void main(String[] args) { HttpClient httpClient = new HttpClient(); PostMethod postMethod = new PostMethod("http://10.30.10.151:8012/gateway.do"); postMethod.addRequestHeader("accept", "*/*"); //设置Content-Type,此处根据实际情况确定 postMethod.addRequestHeader("Content-Type", "application/x-www-form-urlencoded"); //必须设置下面这个Header //添加请求参数 Map paraMap = new HashMap(); paraMap.put("type", "wx"); paraMap.put("mchid", "10101"); postMethod.addParameter("consumerAppId", "test"); postMethod.addParameter("serviceName", "queryMerchantService"); postMethod.addParameter("params", JSON.toJSONString(paraMap)); String result = ""; try { int code = httpClient.executeMethod(postMethod); if (code == 200){ result = postMethod.getResponseBodyAsString(); System.out.println("result:" + result); } } catch (IOException e) { e.printStackTrace(); } } }
3.CloseableHttpClient
는 httpclient-4.5.6.jar을 사용해야 하며, maven 종속성은 다음과 같습니다.
<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.6</version> </dependency>
코드는 다음과 같습니다.
import com.alibaba.fastjson.JSON; import org.apache.http.Consts; import org.apache.http.HttpEntity; import org.apache.http.NameValuePair; 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.HttpPost; 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 java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class HttpTest3 { public static void main(String[] args) { int timeout = 120000; CloseableHttpClient httpClient = HttpClients.createDefault(); RequestConfig defaultRequestConfig = RequestConfig.custom().setConnectTimeout(timeout) .setConnectionRequestTimeout(timeout).setSocketTimeout(timeout).build(); HttpPost httpPost = null; List<NameValuePair> nvps = null; CloseableHttpResponse responses = null;// 命名冲突,换一个名字,response HttpEntity resEntity = null; String result; try { httpPost = new HttpPost("http://10.30.10.151:8012/gateway.do"); httpPost.setConfig(defaultRequestConfig); Map paraMap = new HashMap(); paraMap.put("type", "wx"); paraMap.put("mchid", "10101"); nvps = new ArrayList<NameValuePair>(); nvps.add(new BasicNameValuePair("consumerAppId", "test")); nvps.add(new BasicNameValuePair("serviceName", "queryMerchantService")); nvps.add(new BasicNameValuePair("params", JSON.toJSONString(paraMap))); httpPost.setEntity(new UrlEncodedFormEntity(nvps, Consts.UTF_8)); responses = httpClient.execute(httpPost); resEntity = responses.getEntity(); result = EntityUtils.toString(resEntity, Consts.UTF_8); EntityUtils.consume(resEntity); System.out.println("result:" + result); } catch (Exception e) { e.printStackTrace(); } finally { try { responses.close(); httpClient.close(); } catch (IOException e) { e.printStackTrace(); } } } }
4.
okhttp-3.10.0.jar, maven 종속성을 사용해야 합니다.
<dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>3.10.0</version> </dependency>
코드는 다음과 같습니다.
import com.alibaba.fastjson.JSON; import okhttp3.*; import java.io.IOException; import java.util.HashMap; import java.util.Map; public class HttpTest4 { public static void main(String[] args) throws IOException { String url = "http://10.30.10.151:8012/gateway.do"; OkHttpClient client = new OkHttpClient(); Map paraMap = new HashMap(); paraMap.put("yybh", "1231231"); RequestBody requestBody = new MultipartBody.Builder() .addFormDataPart("consumerAppId", "tst") .addFormDataPart("serviceName", "queryCipher") .addFormDataPart("params", JSON.toJSONString(paraMap)) .build(); Request request = new Request.Builder() .url(url) .post(requestBody) .addHeader("Content-Type", "application/x-www-form-urlencoded") .build(); Response response = client .newCall(request) .execute(); if (response.isSuccessful()) { System.out.println("result:" + response.body().string()); } else { throw new IOException("Unexpected code " + response); } } }
5. Socket
JDK에서 제공하는 net을 기본적으로 사용하며 다른 jar 패키지는 필요하지 않습니다.
코드는 다음과 같습니다.
import com.alibaba.fastjson.JSON; import java.io.IOException; import java.io.InputStream; import java.io.OutputStreamWriter; import java.net.Socket; import java.net.URLEncoder; import java.net.UnknownHostException; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; public class HttpTest6 { private static String encoding = "utf-8"; public static void main(String[] args) { try { Map paraMap = new HashMap(); paraMap.put("yybh", "12312311"); String data = URLEncoder.encode("consumerAppId", "utf-8") + "=" + URLEncoder.encode("test", "utf-8") + "&" + URLEncoder.encode("serviceName", "utf-8") + "=" + URLEncoder.encode("queryCipher", "utf-8") + "&" + URLEncoder.encode("params", "utf-8") + "=" + URLEncoder.encode(JSON.toJSONString(paraMap), "utf-8"); Socket s = new Socket("10.30.10.151", 8012); OutputStreamWriter osw = new OutputStreamWriter(s.getOutputStream()); StringBuffer sb = new StringBuffer(); sb.append("POST /gateway.do HTTP/1.1\r\n"); sb.append("Host: 10.30.10.151:8012\r\n"); sb.append("Content-Length: " + data.length() + "\r\n"); sb.append("Content-Type: application/x-www-form-urlencoded\r\n"); //注,这里很关键。这里一定要一个回车换行,表示消息头完,不然服务器会等待 sb.append("\r\n"); osw.write(sb.toString()); osw.write(data); osw.write("\r\n"); osw.flush(); //--输出服务器传回的消息的头信息 InputStream is = s.getInputStream(); String line = null; int contentLength = 0;//服务器发送回来的消息长度 // 读取所有服务器发送过来的请求参数头部信息 do { line = readLine(is, 0); //如果有Content-Length消息头时取出 if (line.startsWith("Content-Length")) { contentLength = Integer.parseInt(line.split(":")[1].trim()); } //打印请求部信息 System.out.print(line); //如果遇到了一个单独的回车换行,则表示请求头结束 } while (!line.equals("\r\n")); //--输消息的体 System.out.print(readLine(is, contentLength)); //关闭流 is.close(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /* * 这里我们自己模拟读取一行,因为如果使用API中的BufferedReader时,它是读取到一个回车换行后 * 才返回,否则如果没有读取,则一直阻塞,直接服务器超时自动关闭为止,如果此时还使用BufferedReader * 来读时,因为读到最后一行时,最后一行后不会有回车换行符,所以就会等待。如果使用服务器发送回来的 * 消息头里的Content-Length来截取消息体,这样就不会阻塞 * * contentLe 参数 如果为0时,表示读头,读时我们还是一行一行的返回;如果不为0,表示读消息体, * 时我们根据消息体的长度来读完消息体后,客户端自动关闭流,这样不用先到服务器超时来关闭。 */ private static String readLine(InputStream is, int contentLe) throws IOException { ArrayList lineByteList = new ArrayList(); byte readByte; int total = 0; if (contentLe != 0) { do { readByte = (byte) is.read(); lineByteList.add(Byte.valueOf(readByte)); total++; } while (total < contentLe);//消息体读还未读完 } else { do { readByte = (byte) is.read(); lineByteList.add(Byte.valueOf(readByte)); } while (readByte != 10); } byte[] tmpByteArr = new byte[lineByteList.size()]; for (int i = 0; i < lineByteList.size(); i++) { tmpByteArr[i] = ((Byte) lineByteList.get(i)).byteValue(); } lineByteList.clear(); return new String(tmpByteArr, encoding); } }
6.RestTemplate
RestTemplate은 Spring에서 제공하는 HTTP 요청 도구입니다. 기존 Apache 및 HttpCLient보다 훨씬 편리하며 클라이언트의 쓰기 효율성을 크게 향상시킬 수 있습니다. 코드는 다음과 같습니다:
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.client.ClientHttpRequestFactory; import org.springframework.http.client.SimpleClientHttpRequestFactory; import org.springframework.web.client.RestTemplate; @Configuration public class RestTemplateConfig { @Bean public RestTemplate restTemplate(ClientHttpRequestFactory factory){ return new RestTemplate(factory); } @Bean public ClientHttpRequestFactory simpleClientHttpRequestFactory(){ SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory(); factory.setConnectTimeout(15000); factory.setReadTimeout(5000); return factory; } } @Autowired RestTemplate restTemplate; @Test public void postTest() throws Exception { MultiValueMap<String, String> requestEntity = new LinkedMultiValueMap<>(); Map paraMap = new HashMap(); paraMap.put("type", "wx"); paraMap.put("mchid", "10101"); requestEntity.add("consumerAppId", "test"); requestEntity.add("serviceName", "queryMerchant"); requestEntity.add("params", JSON.toJSONString(paraMap)); RestTemplate restTemplate = new RestTemplate(); System.out.println(restTemplate.postForObject("http://10.30.10.151:8012/gateway.do", requestEntity, String.class)); }
위 내용은 JAVA에서 HTTP 요청을 보내는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

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

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

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

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

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

뜨거운 주제











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

PHP와 Python은 각각 고유 한 장점이 있으며 선택은 프로젝트 요구 사항을 기반으로해야합니다. 1.PHP는 간단한 구문과 높은 실행 효율로 웹 개발에 적합합니다. 2. Python은 간결한 구문 및 풍부한 라이브러리를 갖춘 데이터 과학 및 기계 학습에 적합합니다.
