我所处的场景是向 JVM 服务器发送 HTTP GET。此 HTTP GET 的目的是停止远程 JVM(它将像在 Kubernetes Pod 中一样自动重新启动)。
我观察到,当使用 cURL 发送请求时,它会按预期工作:
$ curl namespace.192.168.42.204.nip.io/rest
但是,当用 Java 发送 HTTP GET 时,它会失败,因为它尝试读取响应,该响应为 null:
private String sendGet(String url) throws Exception {
URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
// optional default is GET
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
System.out.println("Response Code : " + responseCode);
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
return "SUCCESS";
}
事实上,当我尝试读取responseCode时,会抛出异常:
java.net.UnknownHostException: namespace.192.168.42.204.nip.io/rest
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:184)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at java.net.Socket.connect(Socket.java:538)
at sun.net.NetworkClient.doConnect(NetworkClient.java:180)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:463)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:558)
at sun.net.www.http.HttpClient.<init>(HttpClient.java:242)
at sun.net.www.http.HttpClient.New(HttpClient.java:339)
at sun.net.www.http.HttpClient.New(HttpClient.java:357)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1220)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1156)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1050)
at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:984)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1564)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1492)
at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:480)
是否可以在 Java 中模拟 cURL 行为?需要发送 GET 请求而不读取响应。你知道用 Java 实现这一点的方法吗?
最佳答案
如果没有什么可读的,也许你可以调用 connect
con.connect();
con.close();
关于Java:执行 HTTP REST GET 调用而不读取响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55511959/