UnknownHostException в Java-приложении, в Почтальоне нет проблем - PullRequest
0 голосов
/ 09 октября 2018

Я пытаюсь подключить API, который находится в Интернете, в приложении Java.Однако я получаю исключение UnknownHostException.

Если я использую тот же API с помощью Postman, я получаю результаты правильно.

Я пробовал несколько вещей, которые я нашел в интернете, например, указание прокси при выполнении приложения Java:

-Dhttp.proxyHost=<some_proxy_url> -Dhttp.proxyPort=80 -Dhttps.proxyHost=<some_proxy_url> -Dhttps.proxyPort=80 -Dhttps.proxySet=true -Dhttp.proxySet=true

но это мне совсем не помогло.

Это код, который я должен выполнить для запроса:

    try (CloseableHttpClient httpClient = HttpClients.createDefault()) {

        HttpRequestBase request = new HttpPost(
                "https://some-host.com/some-api");

        HttpResponse response = httpClient.execute(request);

        System.out.println(response.getStatusLine().getStatusCode());
    } catch (IOException e) {

        e.printStackTrace();
    }

Это полная трассировка стекаисключение:

java.net.UnknownHostException: some-host.com: nodename nor servname provided, or not known
at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
at java.net.InetAddress$2.lookupAllHostAddr(InetAddress.java:928)
at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1323)
at java.net.InetAddress.getAllByName0(InetAddress.java:1276)
at java.net.InetAddress.getAllByName(InetAddress.java:1192)
at java.net.InetAddress.getAllByName(InetAddress.java:1126)
at org.apache.http.impl.conn.SystemDefaultDnsResolver.resolve(SystemDefaultDnsResolver.java:45)
at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:112)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:373)
at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:394)
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:237)
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:185)
at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:108)
at App.connect(App.java:25)
at App.main(App.java:15)

Я заметил, что у меня проблемы с любым хостом, который находится за пределами моей машины.Я даже пытался с хостом www.google.com, и получаю то же исключение.

Однако, если я использую API моего локального хоста, у меня не возникает никаких проблем.

Чего мне не хватает?

1 Ответ

0 голосов
/ 10 октября 2018

Исходя из приведенного выше комментария, звучит так, что конечная точка приложения, которую вы пытаетесь достичь, доступна только через прокси-сервер, который Postman настроен для использования, а ваше Java-приложение, использующее Apache HTTPClient, в настоящее время - нет.

Вы должны иметь возможность настроить HTTPClient для использования прокси-сервера, выполнив следующие действия перед отправкой запроса:

HttpHost target = new HttpHost("some-host.com", 443, "https");
HttpHost proxy = new HttpHost("<your-proxy-host>", /* proxy-port */, "http");

RequestConfig config = RequestConfig.custom()
        .setProxy(proxy)
        .build();
HttpGet request = new HttpPost("/some-api");
request.setConfig(config);
CloseableHttpResponse response = httpclient.execute(target, request);
...