我实在是为这件事抓狂了。
我尝试用 Java 发出 HTTP POST 请求,但它一直将其作为 GET 发送。我采用了几种不同的方式来发送 POST 请求,但所有这些方式最终都只是以 GET 方式发送。
这是我目前拥有的:
URL url = new URL("https://api.soundcloud.com/oauth2/token");
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(data);
wr.close();
// Get the response
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
while ((line = rd.readLine()) != null) {
resp += line;
}
rd.close();
我在 StackOverflow 上的一篇文章中读到 conn.setDoOuput(true) 应该自动使连接成为 POST;但是,当我调试代码时, protected 成员 conn.method 保持为 GET。
我还尝试将 url.openConnection() 转换为 HttpURLConnection 并在其上调用 .setRequestMethod("POST") ,这对 conn.method 完全没有任何改变。
作为奖励,我正在尝试进行 soundcloud 身份验证,基本上我想到的所有方法都彻底失败了......也许有人对此有更好的解决方案?
最佳答案
您是否尝试过使用 SoundCloud 的 Java SDK?
https://github.com/soundcloud/java-api-wrapper
这应该会从您的代码中删除大部分 HTTP/OAuth2。
但是,即使您想要更多地控制自己所做的事情,使用适当的 HTTP 客户端库(例如 Apache 的)通常也是一个好主意,而不是尝试对抗最基本的 Java SE 支持。查看:http://hc.apache.org/httpcomponents-client-ga/index.html
关于java - Java 中的 HTTP POST 请求 .setRequestMethod() 不执行任何操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9528231/