Android:HttpUrlConnection使用POST发送请求bodys(而不是GET)

时间:2016-02-28 15:35:48

标签: android http request

我正在开发一个与(我们自己的)API通信的Android应用程序。它的意思是在请求方法 POST 和非操作请求 GET 的操作请求中使用API​​(因为它应该在 RESTful 中)应用)。

要对请求进行身份验证或添加参数,已使用HTTP请求正文(在GET和POST请求中)。 (是的,可以并且允许为每个HTTP定义的GET请求添加请求主体(参见e.g. this post))。该帖子通常说,可以添加请求正文,但服务器可能在请求期间不使用它。

问题是,请求方法始终设置为POST,如果我在连接配置期间将其设置为GET,即使getRequestMethod确实返回GET后也没有问题通过setRequestMethod("GET")将其设置为GET。

Android应用程序使用 HttpsURLConnection (这是来自 HttpURLConnection 的扩展类,所以它的行为应该相似)。

通过调用这些方法,将有一个请求体:

https.setDoInput(true);
OutputStream os = https.getOutputStream();
os.write(outputInBytes);
os.close();

通过调用https.setRequestMethod("GET"),请求方法应设置为GET。

经过一番调查之后,行OutputStream os = https.getOutputStream();将请求方法设置为POST,之后我再次将其设置为GET并保持GET直到连接结束(由https.getRequestMethod()返回)< / p>

但最终服务器通过请求方法POST接收请求。

所以我的具体问题是:

  • 此问题是否有可能的解决方法/解决方案?
  • 向GET请求添加请求正文真的很糟糕吗?

目前我刚刚将所有请求设置为POST,因此没有问题(我不会有这样做的问题,但出于几个原因我想知道肯定那里没有其他方法可以解决这个问题)

修改:documentation of the getOutputStream() method说:

  

默认请求方法更改为&#34; POST&#34;调用此方法时。

1 个答案:

答案 0 :(得分:1)

默认情况下,HttpURLConnection是GET方法(默认情况下getDoInput()为true)。

如果您使用setDoOutput(true),它将成为POST方法。

如果您需要其他方法(PUT,DELETE等等),那么您将使用setRequestMethod(string)。

当然,您必须在connect()方法

之前选择所需的方法