java - Java:执行 HTTP REST GET 调用而不读取响应
问题描述
我处于向 JVM 服务器发送 HTTP GET 的场景中。此 HTTP GET 的目的是停止远程 JVM(它将在 Kubernetes Pod 中自动重启)。
我观察到的是,当使用 cURL 发送请求时,它按预期工作:
$ curl namespace.192.168.42.204.nip.io/rest
但是,当在 Java 中发送 HTTP GET 时,它会失败,因为它会尝试读取为空的响应:
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 中有什么方法吗?
解决方案
您应该在创建URL
. 使用下面的 Java 11 代码:
new URL("namespace.192.168.42.204.nip.io/rest");
将导致以下结果MalformedURLException
:
java.net.MalformedURLException: no protocol: namespace.192.168.42.204.nip.io/rest
根据手册页,与 Java 不同curl
的是,它会在幕后为您完成:
如果您指定的 URL 不带 protocol:// 前缀,curl 将尝试猜测您可能想要的协议。然后它将默认使用 HTTP,但会尝试基于常用主机名前缀的其他协议。例如,对于以“ftp”开头的主机名。curl 会假设你想使用 FTP。
推荐阅读
- android - Unity 控制台提示安装成功,但在移动设备上找不到游戏
- python - 如何使用 Python 获取 Selenium Chromedriver 的 ID?
- python - 如何通过包含特定python版本的docker从linux运行python代码
- c# - 阻止 WPF InkBrush 引发滚动事件
- angular - html2canvas 在保存到 pdf 时出现网络错误。“下载失败 - 网络错误”
- python - 我得到“NameError:未定义”,即使它是在前一个单元格上定义的
- wordpress - 无法使用 add_filter() 挂钩到自定义过滤器挂钩
- android - 在 Android Studio 上运行应用程序时无法显示图像
- jquery - 如何在我的分页上添加下一个和上一个?
- reactjs - 如何向现有的 asp.net core mvc 应用程序添加对 typescript 的反应