首页 > 解决方案 > 通过httpclient访问云服务器时出现UnknownHostException,但在chrome浏览器上工作正常

问题描述

我正在开发一个测试工具,它可以将 api 直接发送到服务器并验证其响应。在将应用程序移动到远程云服务器之前,它工作正常。

我在我的工具中使用 apache httpclient,如下所示。

CloseableHttpClient client = HttpClients.createDefault();
HttpGet get = new HttpGet(url);
get.setHeader("Content-Type", "application/json");
HttpResponse response = client.execute(get);

现在我得到

java.net.UnknownHostException: This is usually a temporary error during hostname resolution and means that the local server did not receive a response from an authoritative server ("server url")
at java.net.Inet4AddressImpl.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.BasicHttpClientConnectionManager.connect(BasicHttpClientConnectionManager.java:325)
at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:381)
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:111)
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 RESTAPI.HttpClientTester.main(HttpClientTester.java:62)

在将 preferipv4 设置为 true 后,我得到了同样的错误。

  System.setProperty("java.net.preferIPv4Stack" , "true");

我很困惑,因为它在 chrome 浏览器和 SOAP UI 工具上运行良好。我已经挖掘了 3 天,并搜索了所有相关的问题/文章。仍然无法解决。我做错了什么?任何帮助,将不胜感激。

标签: javahttpclientapache-httpclient-4.xapache-commons-httpclient

解决方案


推荐阅读