2009-12-04 72 views
7

我創建一個HTTPS連接和設置請求屬性爲GET:我們如何通過GET方法發送數據?

_httpsConnection = (HttpsConnection) Connector.open(URL, Connector.READ_WRITE); 
_httpsConnection.setRequestMethod(HttpsConnection.GET); 

但我怎麼發送GET參數? 難道我這樣設置請求屬性:

_httpsConnection.setRequestProperty("method", "session.getToken"); 
_httpsConnection.setRequestProperty("developerKey", "value"); 
_httpsConnection.setRequestProperty("clientID", "value"); 

還是我寫信給連接的輸出流?

或者我需要通過將參數/值附加到url?

+2

這是什麼語言? – monksy 2009-12-04 09:21:01

+0

我不是黑莓開發者。但您可以使用網絡嗅探器(IMO超量殺傷)或簡單的服務器端腳本輕鬆測試您的代碼,該腳本將只輸出您的請求信息。例如在PHP中,您可以使用:http://www.php.net/manual/en/reserved.variables.request.php – 2009-12-04 09:27:01

回答

8

調用Connection.setRequestProperty()將設置請求頭,這可能不是你想要的東西在這種情況下做的(如果你問我,我想叫它setRequestHeader會是一個更好的選擇)。有些代理可能會剝離或重寫非標準頭文件的名稱,所以最好不要使用通過URL參數在GET URL中傳遞數據的約定。

做到這一點對黑莓手機的最佳方式是使用URLEncodedPostData類正確編碼的URL參數:

URLEncodedPostData data = new URLEncodedPostData("UTF-8", false); 
data.append("method", "session.getToken"); 
data.append("developerKey", "value"); 
data.append("clientID", "value"); 
url = url + "?" + data.toString(); 
2

是的,標題和屬性幾乎都可以在GET中發送。此外,你被限制在一定數量的字符,這是依賴於瀏覽器 - 我似乎回憶起約1024或2000年,通常。

+0

嘿,我需要通過標題發送參數/值還是將它追加到url – Bohemian 2009-12-04 09:29:02

+0

您可以將其附加到網址 – 2009-12-04 09:35:21

+0

不知道您的環境如何工作,但最終您的請求參數將包含在URL中。您可以直接執行此操作(使用&來分隔鍵/值對,鍵/值之間,字符串中的URL轉義字符),或者希望讓您的API自動爲您執行這些操作。 – 2009-12-04 09:36:07

5

HTTP GET發送數據參數,URL中的編碼鍵/值對,就像:

GET /example.html      // without parameters 
GET /example.html?Id=   1  // with one basic parameter 
GET /example.html?Id=1&Name=John%20Doo // with two parameters, second encoded 

注意按照規則字符分隔:

? - split URL in two pieces: adddress to left and paremeters to right 
& - must be used to separate on parameter from another 

你必須知道你的平臺特定本地字符串編碼功能。 JavaScript使用escape,C#使用HttpUtility.UrlEncode