我有一个带有 CGI 的服务器,它将 REQUEST_METHOD 打印到系统日志中。 我有可以 GET 和 POST 到该 CGI 的网页,并且两种方法都打印我所期望的内容。 我有一个可以获取它的java程序。 但是当我尝试在 Java 中使用 POST 时:
URL url = new URL("https://192.168.10.178/mycgi");
conn = (HttpsURLConnection)url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST"); // <- this bit!
InputStream is = conn.getInputStream();
结果是内容长度为零的 GET。 显然,我有更多的代码来设置内容类型和配置并将数据写入其中,但无论有没有其余部分,我仍然会收到到达服务器的 GET 请求。
我发现这里有这样的提示:
https://community.oracle.com/thread/1535571?start=0&tstart=0
很多人似乎有同样的问题,但没有答案,这里:
Android HTTP POST request sent from application but server "sees" it as a GET request
解决方案是使用 apache http 客户端内容,如果可能的话,我希望避免这种情况,因为它向不需要它们的项目添加了一堆依赖项。
我有点无法解释这个问题。大家有什么建议吗?
最佳答案
确保您的服务器没有对最终目标发出 302/301 响应。这可能会强制客户端将 POST 作为 GET 重新发送。
参见What is the correct behavior expected of an HTTP POST => 302 redirect to GET?原因的解释。
301/302 可能只是由于 URL 中缺少尾部斜杠造成的。检查服务器日志中 200 代码之前的 301/302 代码。
关于java - 来自 java 的 HTTP POST 作为 GET 到达服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23010890/