Java: 使用HttpURLConnection进行HTTP PUT请求

7

如何执行HTTP PUT请求?我正在使用的类似乎认为它正在执行PUT请求,但终端似乎将其视为GET请求。我做错了什么吗?

URL url = new URL("https://...");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("PUT");

OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());

writer.write(xmlString);
writer.close();

System.out.println(conn.getRequestMethod());
String response = readInputStream(conn.getInputStream());
System.out.println(response);

这是打印功能:

PUT
<same content as doing a GET>

如果这个库能用的话,我宁愿不再添加另一个库...

1个回答

5

有一个简单的方法可以找出问题所在:运行Wireshark,查看网络上实际发生了什么。我发现这是诊断这种问题最可靠的方法 - 客户端可能存在错误,库可能存在错误,服务器可能存在错误,但 Wireshark 将向您展示真正发生的情况。

编辑:好吧,对于 HTTPS 来说稍微麻烦些。如果您正在运行 Windows,则可以使用Fiddler,它是一个代理 - 如果您能让客户端代码接受其证书,它就可以处理 HTTPS,但这会更加侵入式...将代理放在中间显然会改变流量的外观。

如果您能够通过 HTTP 与调试版本的服务器交互,那将更好。在您的情况下是否可行?还是服务器完全不受您的控制?


我的所有流量都是通过https发送到远程服务器...而且Wireshark无法在其中看到太多内容。使用curl与从Java中访问它确实有所不同,但我应该寻找什么? - Paul Tarjan
好主意。我联系了他们并获得了一个HTTP服务器进行测试。我发现我的问题是由于缺少Content-Type头而被他们的服务器拒绝。非常感谢。 - Paul Tarjan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接