У меня есть только хосты с IPv6. Я могу успешно выполнить локон запрос на него от завиткаНе удается подключиться к IPv6-узлу из java
$ curl -I my.ip.v6.only.host
HTTP/1.1 200 OK
Но когда я пытаюсь получить его из Java У меня есть ошибка:
HttpGet httpget = new HttpGet("http://my.ip.v6.only.host");
CloseableHttpResponse response = httpclient.execute(httpget);
Stack след:
INFO: I/O exception (java.net.NoRouteToHostException) caught when processing request to {}->http://my.ip.v6.only.host: No route to host
Mar 17, 2015 7:42:23 PM org.apache.http.impl.execchain.RetryExec execute
INFO: Retrying request to {}->http://my.ip.v6.only.host
java.net.NoRouteToHostException: No route to host
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:579)
at org.apache.http.conn.socket.PlainConnectionSocketFactory.connectSocket(PlainConnectionSocketFactory.java:72)
at org.apache.http.impl.conn.HttpClientConnectionOperator.connect(HttpClientConnectionOperator.java:123)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:318)
at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:363)
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:219)
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:195)
at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:86)
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:108)
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:106)
at MainTest.main(MainTest.java:25)
проблемы произошла на java v1.7.0_65 и v1.8.0_40, MacOS 10.10.2. В предыдущей версии MacOS 10.9.5 он работает хорошо.
Что происходит? Как возможно, что хост доступен к curl
и недоступен из java.
Кроме того, я попытался поиграть -Djava.net.preferIPv6Addresses=true
и -Djava.net.preferIPv4Stack=false
, но это не помогло.
UPD нашел связанную ошибку в OpenJDK, JDK-8015415
UPD 2, когда я пытался использовать проводное соединение вместо Wi-Fi, он помог мне. Weird.
Какую версию Apache Http Client вы используете? – Martijn
org.apache.httpcomponents: httpclient: 4.3.5 –
Пробовал обычные запросы Java NIO еще? Кажется, я не могу воссоздать эту проблему на Linux box atm. – Martijn