2016-02-28 99 views
1

我正在开发一个与我们的(我们自己的)API进行通信的Android应用程序。它旨在使用请求方法POST和非操纵性请求GET(因为它应该在RESTful应用程序中)在操纵性请求中使用API​​。Android:HttpUrlConnection使用POST发送请求身体(而不是GET)

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

问题是,该请求方法总是被设置为POST,没有马瑟如果我将它设置为连接配置中是行不通的,即使getRequestMethod不将其设置为通过setRequestMethod("GET") GET后得到的回报。

的机器人应用程序使用HttpsURLConnection的(这是从HttpURLConnection的扩展类,所以它应该表现与之相似)。

通过调用这些方法,请求主体将出席:

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

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

一个小调查后,OutputStream os = https.getOutputStream();设置请求方法为POST行,后来我把它重新获得它仍然GET,直到连接结束(由https.getRequestMethod()返回)

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

所以我的具体问题是:

  • 是否有针对此问题可能的解决方法/解决方案?
  • 将请求主体添加到GET请求真的不好吗?

目前,我刚刚设置所有的请求到POST,所以没有问题(它并没有问题(我不会有这样的问题,但由于几个原因,我想知道肯定的有没有其他办法可以解决这个问题)

编辑:documentation of the getOutputStream() method说:

默认请求方法更改为“POST”时,此方法被调用。

回答

1

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

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

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

当然,你必须选择你的connect()方法的回复

+0

由于之前想的方法,但我目前设置请求方法来获取_before_了'连接()'方法。 'getRequestMethod'然后返回** GET **,但请求仍然使用POST(这是我的问题)执行 –

+0

如果您要发送数据,这将被认为是一个帖子。一个GET方法不应该发送信息。查询应该放入网址中,或者通过在标题中添加请求属性。在这里我看到一个outputInBytes,它是什么? – xiaomi

+0

我确实发送参数作为GET参数或在标题字段中是常见的,但是[在这篇文章后(与原文章中的链接相同)](http://stackoverflow.com/a/983458/5045290),它允许每个RFC将请求主体包含到GET请求中。但我认为不发送GET请求体将会更好,因为没有多少客户机/服务器明白这是可能的。 –

相关问题