Android使用HttpURLConnection无法发送GET请求

3
我正在尝试在我的应用程序中使用HttpURLConnection。我将请求方法设置为“GET”,但当我尝试检索输出流时,该方法被更改为“POST”!虽然我不确定这是否是原因,但我的JSON服务器(我使用JAX-RS)在使用“POST”发送请求时返回一个空白页面。
以下是我的代码片段:
// Create the connection
HttpURLConnection con = (HttpURLConnection) new URL(getUrl() + uriP).openConnection();
// Add cookies if necessary
if (cookies != null) {
  for (String cookie : cookies) {
    con.addRequestProperty("Cookie", cookie);
    Log.d("JSONServer", "Added cookie: " + cookie);
  }
}
con.setDoOutput(true);
con.setDoInput(true);
con.setUseCaches(false);
con.setRequestMethod("GET");
con.setConnectTimeout(20000);
// Add 'Accept' property in header otherwise JAX-RS/CXF will answer a XML stream
con.addRequestProperty("Accept", "application/json");

// Get the output stream
OutputStream os = con.getOutputStream();

// !!!!! HERE THE REQUEST METHOD HAS BEEN CHANGED !!!!!!
OutputStreamWriter wr = new OutputStreamWriter(os);
wr.write(requestP);
// Send the request
wr.flush();

感谢您的回答。 Eric
2个回答

8

但是GET请求本应没有内容...通过向连接的输出流写入数据,您正在改变请求的性质为POST。库非常聪明,发现您正在这样做...getOutputStream的文档明确指出:“调用此方法时,默认请求方法更改为“POST”。"

如果您需要在GET请求中将数据发送到服务器,则需要以通常的方式对URL参数进行编码。


太好了,它起作用了!非常感谢您的快速回答。我犯了一个错误:我重用了一个旧代码,并使用上面的片段请求服务器。这个服务器不介意请求使用POST还是GET方法! - Eric

4
从你的代码中移除 con.setDoOutput(true); 语句。 这样,使用 GET 方法的 Web 服务请求就可以正常工作了。

HttpURLConnection 默认使用 GET 方法。如果调用了 setDoOutput(true) 方法,则会使用 POST 方法。

上述评论可以在以下 URL 中找到。

Android HTTPURLConnection 类


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