未知主机异常:名称或服务未知

2022-09-03 04:59:01

我正在尝试使用com.squareup.okhttp中的OkHttpClient从API返回一些数据。我遇到了一些我最终能够克服的错误,但我无法通过这个主机异常错误,这里的任何内容似乎都不足以具体到我的情况,能够解决。

以下是我尝试的代码以及输出,如果有人知道如何克服错误,我将不胜感激。

法典

public void connect() {         
    OkHttpClient client = new OkHttpClient();

    com.squareup.okhttp.Request request = new com.squareup.okhttp.Request.Builder()
    .url("https://socialweb-analytics.lcloud.com/api/public/reports/jobs?companyKey=ato")
    .get()
    .addHeader("authorization", "Basic c2RidXNpbmVzc2FuYWx5dGljc0BhdG8uZ292LmF1OkFuYWx5dGljezEh")
    .addHeader("cache-control", "no-cache")
    .addHeader("postman-token", "65ef5553-77b5-053f-9c01-4fdf76bdc92f")
    .build();

    System.out.println(request.toString());

    try {
        Response response = client.newCall(request).execute();
        System.out.println(response);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

输出

Request{method=GET, url=https://socialweb-analytics.lcloud.com/api/public/reports/jobs?companyKey=ato, tag=null}
java.net.UnknownHostException: socialweb-analytics.lcloud.com: Name or service not known
    at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
    at java.net.InetAddress$1.lookupAllHostAddr(InetAddress.java:922)
    at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1314)
    at java.net.InetAddress.getAllByName0(InetAddress.java:1267)
    at java.net.InetAddress.getAllByName(InetAddress.java:1183)
    at java.net.InetAddress.getAllByName(InetAddress.java:1119)
    at com.squareup.okhttp.internal.Network$1.resolveInetAddresses(Network.java:29)
    at com.squareup.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:187)
    at com.squareup.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:156)
    at com.squareup.okhttp.internal.http.RouteSelector.next(RouteSelector.java:98)
    at com.squareup.okhttp.internal.http.HttpEngine.createNextConnection(HttpEngine.java:344)
    at com.squareup.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:327)
    at com.squareup.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:245)
    at com.squareup.okhttp.Call.getResponse(Call.java:267)
    at com.squareup.okhttp.Call$ApplicationInterceptorChain.proceed(Call.java:224)
    at com.squareup.okhttp.Call.getResponseWithInterceptorChain(Call.java:195)
    at com.squareup.okhttp.Call.execute(Call.java:79)
    at technical_services.persistence.lithium.LithiumDataStore.connect1(LithiumDataStore.java:127)
    at application.lithium_etl.LithiumTestController.main(LithiumTestController.java:24)

答案 1

对于类似“java.net.UnknownHostException: [hostname]”的错误

原因是您的主机名不在 /etc/hosts 中,解决方案很简单:

sudo vim /etc/hosts

更改该行的样式:

127.0.0.1  localhost

自:

127.0.0.1  [hostname] localhost

保存并退出。如果问题仍然存在,可能是您需要重新启动或运行:

sudo ifconfig eth0 down&&sudo ifconfig eth0 up

希望它能帮助你!


答案 2

扩展了zhenbo xu的伟大答案,这就是我在EC2中实现自动化所做的工作。sed

sudo sed -i -e '/127.0.0.1/ s/\(localhost\)/'$(hostname)' \1/' /etc/hosts

请注意,要允许变量扩展,单引号在子壳调用周围结束并重新开始。

hostname是某些 Linux 系统上的可执行文件(但可能不是全部,因此您可以改用环境变量,或者删除子shell 周围的引号并使用静态字符串)。

这很神奇,它将“捕获的”搜索字符串(s/search/replacement/)放在转义括号中,回到替换字符串中。\1sed