java - 来自 java 的 HTTP POST 作为 GET 到达服务器

标签 java android http post get

我有一个带有 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/

相关文章:

java - 哪种 Oracle JDBC 驱动程序与 Java 一起使用来开发 Web 应用程序

android - 如何修复 : "HAX is not working and emulator runs in emulation mode"

Android位置提醒项目

http - Golang解析原始HTTP/2响应

apache - 使用本地网络中的 xampp 服务器托管站点,无需端口转发

java - FFT解释

java - Android XML布局复选框 "onclick"方法绑定(bind)到MainActivity中找不到的函数

java - 在 Java 中实现 Prim 的 MST

java - 显示经纬度的 map 标记

http - 是否有 https (443) 的替代默认端口号高于 1024?