2016-02-28 97 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請求體將會更好,因爲沒有多少客戶機/服務器明白這是可能的。 –

相關問題