Java:执行 HTTP REST GET 调用而不读取响应

标签 java


我所处的场景是向 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/

相关文章:

java - 如何从缓冲图像中获取子图像

java - 如何更改集合中的实例

java - 在 JavaFX 中安全地关闭/删除 ImageView 文件

java - 再次在派生类中添加Jackson中的字段,该字段在基类中已被忽略

java - 如何用java获取一个财政年度

java - JUnit 测试 groovy 脚本导致 JUnit 测试文件中的 "unable to resolve class"试图测试另一个 groovy 脚本

java - 通过 JNI 将双字节 (WCHAR) 字符串从 C++ 传递到 Java

java - 如何获取时区的本地日期时间

java - 当 jackson 为空列表时不要返回属性

java - 无需登录即可直接从 Alfresco 访问文件/内容