diff --git a/libraries/pom.xml b/libraries/pom.xml
index 25c1113fea..546fe8a6d8 100644
--- a/libraries/pom.xml
+++ b/libraries/pom.xml
@@ -622,6 +622,21 @@
bcpkix-jdk15on
1.58
+
+ com.google.http-client
+ google-http-client
+ ${googleclient.version}
+
+
+ com.google.http-client
+ google-http-client-jackson2
+ ${googleclient.version}
+
+
+ com.google.http-client
+ google-http-client-gson
+ ${googleclient.version}
+
@@ -639,6 +654,7 @@
+ 1.23.0
0.1.0
0.7.0
3.2.4
diff --git a/libraries/src/main/java/com/baeldung/googlehttpclientguide/GitHubExample.java b/libraries/src/main/java/com/baeldung/googlehttpclientguide/GitHubExample.java
new file mode 100644
index 0000000000..0618a7294d
--- /dev/null
+++ b/libraries/src/main/java/com/baeldung/googlehttpclientguide/GitHubExample.java
@@ -0,0 +1,65 @@
+package com.baeldung.googlehttpclientguide;
+
+import com.google.api.client.http.HttpBackOffUnsuccessfulResponseHandler;
+import com.google.api.client.http.HttpRequest;
+import com.google.api.client.http.HttpRequestFactory;
+import com.google.api.client.http.HttpResponse;
+import com.google.api.client.http.HttpResponseException;
+import com.google.api.client.http.HttpTransport;
+import com.google.api.client.http.apache.ApacheHttpTransport;
+import com.google.api.client.http.javanet.NetHttpTransport;
+import com.google.api.client.json.JsonFactory;
+import com.google.api.client.json.JsonObjectParser;
+import com.google.api.client.json.jackson2.JacksonFactory;
+import com.google.api.client.util.ExponentialBackOff;
+import com.google.gson.reflect.TypeToken;
+import java.lang.reflect.Type;
+import java.util.List;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+
+public class GitHubExample {
+ static final HttpTransport HTTP_TRANSPORT = new NetHttpTransport();
+ //static final HttpTransport HTTP_TRANSPORT = new ApacheHttpTransport();
+ static final JsonFactory JSON_FACTORY = new JacksonFactory();
+ //static final JsonFactory JSON_FACTORY = new GsonFactory();
+
+ private static void run() throws Exception {
+ HttpRequestFactory requestFactory
+ = HTTP_TRANSPORT.createRequestFactory(
+ (HttpRequest request) -> {
+ request.setParser(new JsonObjectParser(JSON_FACTORY));
+ });
+ GitHubUrl url = new GitHubUrl("https://api.github.com/users");
+ url.per_page = 10;
+ url.page = 1;
+ HttpRequest request = requestFactory.buildGetRequest(url);
+ ExponentialBackOff backoff = new ExponentialBackOff.Builder()
+ .setInitialIntervalMillis(500)
+ .setMaxElapsedTimeMillis(900000)
+ .setMaxIntervalMillis(6000)
+ .setMultiplier(1.5)
+ .setRandomizationFactor(0.5)
+ .build();
+ request.setUnsuccessfulResponseHandler(new HttpBackOffUnsuccessfulResponseHandler(backoff));
+ Type type = new TypeToken>() {}.getType();
+ List users = (List)request.execute().parseAs(type);
+ System.out.println(users);
+ url.appendRawPath("/eugenp");
+ request = requestFactory.buildGetRequest(url);
+ ExecutorService executor = Executors.newSingleThreadExecutor();
+ Future responseFuture = request.executeAsync(executor);
+ User eugen = responseFuture.get().parseAs(User.class);
+ System.out.println(eugen);
+ executor.shutdown();
+ }
+
+ public static void main(String[] args) {
+ try {
+ run();
+ } catch (Exception e) {
+ System.err.println(e.getMessage());
+ }
+ }
+}
diff --git a/libraries/src/main/java/com/baeldung/googlehttpclientguide/GitHubUrl.java b/libraries/src/main/java/com/baeldung/googlehttpclientguide/GitHubUrl.java
new file mode 100644
index 0000000000..c44de1e145
--- /dev/null
+++ b/libraries/src/main/java/com/baeldung/googlehttpclientguide/GitHubUrl.java
@@ -0,0 +1,18 @@
+package com.baeldung.googlehttpclientguide;
+
+import com.google.api.client.http.GenericUrl;
+import com.google.api.client.util.Key;
+
+public class GitHubUrl extends GenericUrl{
+
+ public GitHubUrl(String encodedUrl) {
+ super(encodedUrl);
+ }
+
+ @Key
+ public int per_page;
+
+ @Key
+ public int page;
+
+}
diff --git a/libraries/src/main/java/com/baeldung/googlehttpclientguide/User.java b/libraries/src/main/java/com/baeldung/googlehttpclientguide/User.java
new file mode 100644
index 0000000000..bf4ee96b25
--- /dev/null
+++ b/libraries/src/main/java/com/baeldung/googlehttpclientguide/User.java
@@ -0,0 +1,77 @@
+package com.baeldung.googlehttpclientguide;
+
+import com.google.api.client.json.GenericJson;
+import com.google.api.client.util.Key;
+
+public class User extends GenericJson {
+ @Key
+ private String login;
+ @Key
+ private long id;
+ @Key
+ private String url;
+ @Key
+ private String company;
+ @Key
+ private String blog;
+ @Key
+ private String email;
+
+ @Key("subscriptions_url")
+ private String subscriptionsUrl;
+
+ public String getLogin() {
+ return login;
+ }
+
+ public void setLogin(String login) {
+ this.login = login;
+ }
+
+ public long getId() {
+ return id;
+ }
+
+ public void setId(long id) {
+ this.id = id;
+ }
+
+ public String getUrl() {
+ return url;
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+ public String getCompany() {
+ return company;
+ }
+
+ public void setCompany(String company) {
+ this.company = company;
+ }
+
+ public String getBlog() {
+ return blog;
+ }
+
+ public void setBlog(String blog) {
+ this.blog = blog;
+ }
+
+ public String getEmail() {
+ return email;
+ }
+
+ public void setEmail(String email) {
+ this.email = email;
+ }
+
+ @Override
+ public String toString() {
+ return "User{" + "login=" + login + ", id=" + id + ", url=" + url + ", company=" + company + ", blog=" + blog + ", email=" + email + '}';
+ }
+
+
+}
diff --git a/libraries/src/main/java/com/baeldung/googlehttpclientguide/logging.properties b/libraries/src/main/java/com/baeldung/googlehttpclientguide/logging.properties
new file mode 100644
index 0000000000..02489378df
--- /dev/null
+++ b/libraries/src/main/java/com/baeldung/googlehttpclientguide/logging.properties
@@ -0,0 +1,10 @@
+# Properties file which configures the operation of the JDK logging facility.
+# The system will look for this config file to be specified as a system property:
+# -Djava.util.logging.config.file=${project_loc:dailymotion-simple-cmdline-sample}/logging.properties
+
+# Set up the console handler (uncomment "level" to show more fine-grained messages)
+handlers = java.util.logging.ConsoleHandler
+java.util.logging.ConsoleHandler.level = ALL
+
+# Set up logging of HTTP requests and responses (uncomment "level" to show)
+com.google.api.client.http.level = ALL