我有一个带有CGI的服务器,它将REQUEST_METHOD输出到syslog。 我有网页,可以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客户端的东西,如果可能的话我宁愿避免使用它,因为它为一个不需要它们的项目添加了一堆依赖项。
我有点不知要解释这个。有人有什么建议吗?
答案 0 :(得分:2)
确保您的服务器没有响应最终目的地的302/301响应。这可能会强制客户端将POST重新发送为GET。
有关原因的说明,请参阅What is the correct behavior expected of an HTTP POST => 302 redirect to GET?。
301/302可能只是因为URL中缺少尾部斜杠。在200代码之前检查服务器日志中的301/302代码。