【问题标题】:Java: HTTP PUT with HttpURLConnectionJava:带有 HttpURLConnection 的 HTTP PUT
【发布时间】:2010-01-20 07:04:27
【问题描述】:

如何进行 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>

如果这个库可以工作,我宁愿不包含另一个库...

【问题讨论】:

    标签: java httpurlconnection http-put


    【解决方案1】:

    有一种简单的方法可以找出答案:运行 Wireshark 并查看网络上实际发生了什么。我发现这是诊断此类问题的最可靠方法 - 您的客户端可能有错误,库可能有错误,服务器可能有错误,但 Wireshark 会告诉您真正发生的事情。

    编辑:好的,对于 HTTPS,它有点棘手。如果您在 Windows 上运行,则可以使用 Fiddler,这是一个代理 - 如果您可以说服您的客户端代码接受其证书,它可以处理 HTTPS,但这有点侵入性......在方式明显改变了流量的样子。

    如果您可以通过 HTTP 与调试版本的服务器通信,那就更好了。在您的情况下这是否可行,或者服务器完全不在您的控制范围内?

    【讨论】:

    • 我所有的流量都是 https 到远程服务器......而wireshark 看不到里面的太多内容。用 curl 和 java 打它看起来确实不同,但我应该寻找什么?
    • 好主意。我联系了他们并获得了一个 HTTP 服务器进行测试。我发现我的问题是缺少他们的服务器拒绝的 Content-Type 标头。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多