Search code examples
javaapacheapache-httpclient-4.x

Connection Failed: Timeout for Testing API using Java, Apache HTTP Client


I am trying to test API using Java. I am using Java 8, Apache HTTP client 4.5.3 to test it. I tried many different ways to testing using Java .net class, Apache HTTP client but every time same issue;

Exception in thread "main" org.apache.http.conn.HttpHostConnectException: Connect to api.github.com:443 [api.github.com/192.30.253.116, api.github.com/192.30.253.117] failed: Connection timed out: connect at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:159)

Everytime I am getting time out. But if I use same URL in Browser I am getting result.

Can someone help me to point out issue? Whether its setup issue or code issue?

Tried almost all codes available on internet. I am beginner for API testing and don't have knowledge of in depth of HTTP workflow.

import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.impl.client.HttpClientBuilder;

import java.io.IOException;
import java.net.*;

public class API {


    public static void main(String args[]) throws IOException, URISyntaxException {


        HttpUriRequest request = new HttpGet( "https://api.github.com" );

        // When
        HttpResponse response = HttpClientBuilder.create().build().execute( request );

        System.out.println(response.getStatusLine().getStatusCode());
    }
}

Using Java .net package

import java.io.IOException;
import java.net.*;

public class API {


    public static void main(String args[]) throws  IOException, URISyntaxException {


        URL url = new URL("http://maps.googleapis.com/maps/api/geocode/json?address=chicago&sensor=false");
        //URL url = uri.toURL();

        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("GET");
        conn.setRequestProperty("Accept", "application/xml");

        if (conn.getResponseCode() != 200) {
            throw new RuntimeException("HTTP error code : "
                    + conn.getResponseCode());
        }

    }
}

Solution

  • If the same URL works in browser then there are only three possibilities.

    1. The URL expects headers like User-Agent. You can set request headers needed like this: request.setHeader("User-Agent", "Mozilla");

    2. You are in a corporate or restricted environment and need a proxy to connect to external URLs. Your browser might already be setup to use proxy server. In this case, you will need to pass proxy credentials to http client API.

      Example: https://hc.apache.org/httpcomponents-client-ga/httpclient/examples/org/apache/http/examples/client/ClientProxyAuthentication.java

    3. All outgoing requests are blocked in your environment by firewall or something. In this case, you will need to ask your network admin to allow network connection.