In this article, we will show you a few examples to make HTTP GET/POST requests via the following APIs
- Apache HttpClient 4.5.13
- OkHttp 4.2.2
- Java 11 HttpClient
- Java 1.1 HttpURLConnection (Not recommend)
1. Apache HttpClient
In the old days, this Apache HttpClient is the de facto standard to send an HTTP GET/POST request in Java.
pom.xml
<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.13</version> </dependency>
HttpClientExample.java
package com.favtuts.http; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.http.Header; import org.apache.http.HttpEntity; import org.apache.http.HttpHeaders; import org.apache.http.NameValuePair; 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.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; public class HttpClientExample { // one instance, reuse private final CloseableHttpClient httpClient = HttpClients.createDefault(); public static void main(String[] args) throws Exception { HttpClientExample obj = new HttpClientExample(); try { System.out.println("Testing 1 - Send Http GET request"); obj.sendGet(); System.out.println("Testing 2 - Send Http POST request"); obj.sendPost(); } finally { obj.close(); } } private void close() throws IOException { httpClient.close(); } private void sendGet() throws IOException { HttpGet request = new HttpGet("https://www.google.com/search?q=favtuts"); // add request headers request.addHeader("custom-key", "favtuts"); request.addHeader(HttpHeaders.USER_AGENT, "Googlebot"); try (CloseableHttpResponse response = httpClient.execute(request)) { // Get HttpResponse Status System.out.println(response.getStatusLine().toString()); HttpEntity entity = response.getEntity(); Header headers = entity.getContentType(); System.out.println(headers); if (entity != null) { // return it as a String String result = EntityUtils.toString(entity); System.out.println(result); } } } private void sendPost() throws Exception { HttpPost post = new HttpPost("https://httpbin.org/post"); // add request parameter, form parameters List<NameValuePair> urlParameters = new ArrayList<>(); urlParameters.add(new BasicNameValuePair("username", "abc")); urlParameters.add(new BasicNameValuePair("password", "123")); urlParameters.add(new BasicNameValuePair("custom", "secret")); post.setEntity(new UrlEncodedFormEntity(urlParameters)); try (CloseableHttpClient httpClient = HttpClients.createDefault(); CloseableHttpResponse response = httpClient.execute(post)) { System.out.println(EntityUtils.toString(response.getEntity())); } } }
Note
Read more Apache HttpClient examples
2. OkHttp
This OkHttp is very popular on Android, and widely use in many web projects, the rising star.
pom.xml
<dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>4.2.2</version> </dependency>
OkHttpExample.java
package com.favtuts.http; import okhttp3.*; import java.io.IOException; public class OkHttpExample { // one instance, reuse private final OkHttpClient httpClient = new OkHttpClient(); public static void main(String[] args) throws Exception { OkHttpExample obj = new OkHttpExample(); System.out.println("Testing 1 - Send Http GET request"); obj.sendGet(); System.out.println("Testing 2 - Send Http POST request"); obj.sendPost(); } private void sendGet() throws Exception { Request request = new Request.Builder() .url("https://www.google.com/search?q=favtuts") .addHeader("custom-key", "favtuts") // add request headers .addHeader("User-Agent", "OkHttp Bot") .build(); try (Response response = httpClient.newCall(request).execute()) { if (!response.isSuccessful()) throw new IOException("Unexpected code " + response); // Get response body System.out.println(response.body().string()); } } private void sendPost() throws Exception { // form parameters RequestBody formBody = new FormBody.Builder() .add("username", "abc") .add("password", "123") .add("custom", "secret") .build(); Request request = new Request.Builder() .url("https://httpbin.org/post") .addHeader("User-Agent", "OkHttp Bot") .post(formBody) .build(); try (Response response = httpClient.newCall(request).execute()) { if (!response.isSuccessful()) throw new IOException("Unexpected code " + response); // Get response body System.out.println(response.body().string()); } } }
Note
Read more OkHttp examples
3. Java 11 HttpClient
In Java 11, a new HttpClient is introduced in package java.net.http.*
The sendAsync()
will return a CompletableFuture
, it makes concurrent requests much easier and flexible, no more external libraries to send an HTTP request!
Java11HttpClientExample.java
package com.favtuts.http; import java.net.URI; import java.net.URLEncoder; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.Map; public class Java11HttpClientExample { // one instance, reuse private final HttpClient httpClient = HttpClient.newBuilder() .version(HttpClient.Version.HTTP_2) .build(); public static void main(String[] args) throws Exception { Java11HttpClientExample obj = new Java11HttpClientExample(); System.out.println("Testing 1 - Send Http GET request"); obj.sendGet(); System.out.println("Testing 2 - Send Http POST request"); obj.sendPost(); } private void sendGet() throws Exception { HttpRequest request = HttpRequest.newBuilder() .GET() .uri(URI.create("https://httpbin.org/get")) .setHeader("User-Agent", "Java 11 HttpClient Bot") .build(); HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString()); // print status code System.out.println(response.statusCode()); // print response body System.out.println(response.body()); } private void sendPost() throws Exception { // form parameters Map<Object, Object> data = new HashMap<>(); data.put("username", "abc"); data.put("password", "123"); data.put("custom", "secret"); data.put("ts", System.currentTimeMillis()); HttpRequest request = HttpRequest.newBuilder() .POST(buildFormDataFromMap(data)) .uri(URI.create("https://httpbin.org/post")) .setHeader("User-Agent", "Java 11 HttpClient Bot") // add request header .header("Content-Type", "application/x-www-form-urlencoded") .build(); HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString()); // print status code System.out.println(response.statusCode()); // print response body System.out.println(response.body()); } private static HttpRequest.BodyPublisher buildFormDataFromMap(Map<Object, Object> data) { var builder = new StringBuilder(); for (Map.Entry<Object, Object> entry : data.entrySet()) { if (builder.length() > 0) { builder.append("&"); } builder.append(URLEncoder.encode(entry.getKey().toString(), StandardCharsets.UTF_8)); builder.append("="); builder.append(URLEncoder.encode(entry.getValue().toString(), StandardCharsets.UTF_8)); } System.out.println(builder.toString()); return HttpRequest.BodyPublishers.ofString(builder.toString()); } }
Note
Read more Java 11 HttpClient examples
4. HttpURLConnection
This HttpURLConnection
class is available since Java 1.1, uses this if you dare 🙂 Generally, it’s NOT recommend to use this class, because the codebase is very old and outdated, it may not supports the new HTTP/2 standard, in fact, it’s really difficult to configure and use this class.
The below example is just for self reference, NOT recommend to use this class!
HttpURLConnectionExample.java
package com.favtuts.http; import javax.net.ssl.HttpsURLConnection; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; public class HttpURLConnectionExample { public static void main(String[] args) throws Exception { HttpURLConnectionExample obj = new HttpURLConnectionExample(); System.out.println("Testing 1 - Send Http GET request"); obj.sendGet(); System.out.println("Testing 2 - Send Http POST request"); obj.sendPost(); } private void sendGet() throws Exception { String url = "https://www.google.com/search?q=favtuts"; HttpURLConnection httpClient = (HttpURLConnection) new URL(url).openConnection(); // optional default is GET httpClient.setRequestMethod("GET"); //add request header httpClient.setRequestProperty("User-Agent", "Mozilla/5.0"); int responseCode = httpClient.getResponseCode(); System.out.println("\nSending 'GET' request to URL : " + url); System.out.println("Response Code : " + responseCode); try (BufferedReader in = new BufferedReader( new InputStreamReader(httpClient.getInputStream()))) { StringBuilder response = new StringBuilder(); String line; while ((line = in.readLine()) != null) { response.append(line); } //print result System.out.println(response.toString()); } } private void sendPost() throws Exception { // url is missing? //String url = "https://selfsolve.apple.com/wcResults.do"; String url = "https://httpbin.org/post"; HttpsURLConnection httpClient = (HttpsURLConnection) new URL(url).openConnection(); //add reuqest header httpClient.setRequestMethod("POST"); httpClient.setRequestProperty("User-Agent", "Mozilla/5.0"); httpClient.setRequestProperty("Accept-Language", "en-US,en;q=0.5"); String urlParameters = "sn=C02G8416DRJM&cn=&locale=&caller=&num=12345"; // Send post request httpClient.setDoOutput(true); try (DataOutputStream wr = new DataOutputStream(httpClient.getOutputStream())) { wr.writeBytes(urlParameters); wr.flush(); } int responseCode = httpClient.getResponseCode(); System.out.println("\nSending 'POST' request to URL : " + url); System.out.println("Post parameters : " + urlParameters); System.out.println("Response Code : " + responseCode); try (BufferedReader in = new BufferedReader( new InputStreamReader(httpClient.getInputStream()))) { String line; StringBuilder response = new StringBuilder(); while ((line = in.readLine()) != null) { response.append(line); } //print result System.out.println(response.toString()); } } }
Download Source Code
$ git clone https://github.com/favtuts/java-core-tutorials-examples
$ cd java-misc/http