gpt4 book ai didi

java - 使用 HttpUrlConnection 访问 Tomcat 时 404,从浏览器访问 200

转载 作者:搜寻专家 更新时间:2023-11-01 03:07:30 25 4
gpt4 key购买 nike

我遇到了最奇怪的 Tomcat 错误。我有一个使用 tomcat 在本地主机的 8080 端口上运行的 Web 应用程序,一切似乎都运行良好,没有错误等。但是,当我尝试使用 HttpURLConnection 类从另一个应用程序访问此 Web 应用程序时,出现 404 错误。奇怪的是,当我将相同的 URL 放入浏览器时,它会返回一个 200 代码并且有一个有效的响应。

我已经尝试/检查了这些帖子中的以下内容:post1post2

  1. 设置 User AgentAccept header 。
  2. 我已经检查了响应主体(使用 HttpURLConnection.getInputStream() 以及 HttpURLConnection.getErrorStream(),以防 404 是不正确的返回码)并且确实收到了页面未找到的响应。
  3. 我已经尝试将 connection.setDoOutput() 设置为 truefalse 但没有帮助。
  4. 尝试将 localhost 更改为 127.0.0.1

更多信息,我查看了 Tomcat 访问日志,似乎请求从未到达服务器(意味着请求从未被记录)。但是,当我将 url 放入浏览器(并获得有效响应)时,该请求确实显示在日志中。

还有一件事,我正在使用 eclipse 运行 tomcat。是的,该应用程序正在服务器上部署。

此外,我发现有人似乎遇到了完全相同的问题 here ,但没有解决方案,所以我将问题提交给 SO 的伟大社区!

编辑:来自调用应用程序的代码:

出于隐私原因,我隐藏了 url

 public static void main(String[] args) {
final String url = "";
try {
URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setDoOutput(false);
System.out.println(con.getResponseCode());
System.out.println(getStringFromInputStream(con.getInputStream()));
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("DONE");
}

是的,这确实适用于其他主机,例如 google。我从 http://www.google.com 得到的响应是这样的:

200
<!doctype html><html....>*bunch of html*</html>
DONE

回复http://localhost:8080/...:

    404
java.io.FileNotFoundException: *url*
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
at sun.net.www.protocol.http.HttpURLConnection$6.run(HttpURLConnection.java:1674)
at sun.net.www.protocol.http.HttpURLConnection$6.run(HttpURLConnection.java:1672)
at java.security.AccessController.doPrivileged(Native Method)
at sun.net.www.protocol.http.HttpURLConnection.getChainedException(HttpURLConnection.java:1670)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1243)
at Get.main(Get.java:32)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
Caused by: java.io.FileNotFoundException: *url*
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1623)
at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:468)
at Get.main(Get.java:31)
... 5 more
DONE

最佳答案

因此,通过关闭从 Eclipse 运行的 Tomcat 并重试应用程序和浏览器请求,我们发现某些进程正在窃取您的请求。

你可以通过运行 netstat -nao | 找到窃贼。在 Windows 或 netstat -nap | 上查找“8080” Linux 上的 grep 8080。它应该显示包含 LISTENING127.0.0.1:8080 的一行,接下来是进程 ID。

关于java - 使用 HttpUrlConnection 访问 Tomcat 时 404,从浏览器访问 200,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17433906/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com