Я отправляю данные по HTTPS, но серверная часть говорит, что не получает их - PullRequest
3 голосов
/ 05 апреля 2011

Я создаю приложение, которое отправляет некоторые данные в защищенную сеть.

На стороне сервера они нуждаются в данных как объект JSON.Для этого я создаю данные как объект JSON и записываю эти данные в OutputStream соединения.

Но ответ со стороны сервера говорит, что он не получает данные, которые я передаю.

Используемый фрагмент кода приведен ниже:

HttpsConnection _connection = (HttpsConnection)Connector.open("https://gmail.com/",Connector.READ_WRITE, true);             _connection.setRequestMethod(HttpsConnection.POST);
_connection.setRequestProperty("If-Modified-Since", "29 Oct 1999 19:43:31 GMT");
_connection.setRequestProperty("User-Agent","Profile/MIDP-2.0 Configuration/CLDC-1.0");
_connection.setRequestProperty("Content-Language", "en-US");
_connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
byte[] postData = jsonObject.toString().getBytes("UTF-8");
_connection.setRequestProperty("Content-Length", Integer.toString(postData.length));
_connection.setRequestProperty("jsondata",jsonObject.toString());
OutputStream os = _connection.openOutputStream();
os.write(postData);
os.flush();

Пожалуйста, помогите мне решить эту проблему.

Ответы [ 3 ]

3 голосов
/ 05 апреля 2011

Я думаю, причина в "Content-Type" => "application/x-www-form-urlencoded". Этот тип POST существует для отправки списка key=value пар. Таким образом, сервер на своей стороне будет анализировать почтовые данные в парах key=value. Я полагаю, что в вашем случае просто не удается проанализировать полученные почтовые данные, потому что вы не отправляете данные в форме пар key=value (вместо этого вы просто добавляете в нее всю строку json jsonObject.toString().getBytes("UTF-8")).

Таким образом, вам нужно сформировать пару ключ-значение "json = YOUR_JSON_HERE". Затем на сервере вы получите ваши данные в виде значения параметра json:

URLEncodedPostData encPostData = new URLEncodedPostData("UTF-8", false);
encPostData.append("json", jsonObject.toString());
byte[] postData = encPostData.toString().getBytes("UTF-8");

Другим вариантом (и, кстати, это был бы наиболее подходящий способ решения этой конкретной задачи), было бы использование типа POST "multipart / form-data". Однако реализовать его будет немного сложнее, если вы никогда не делали этого раньше на BB.

1 голос
/ 05 апреля 2011

Вы должны добавить соответствующий суффикс к вашему URL Например: если вы используете симулятор, используйте: https://gmail.com/;deviceside=true и т. д.

0 голосов
/ 31 августа 2011

У меня та же проблема, но, наконец, я нашел решение:

HttpConnection c = (HttpConnection)Connector.open(url);
c.setRequestMethod(HttpConnection.POST);
c.setRequestProperty(
    HttpProtocolConstants.HEADER_CONTENT_TYPE, PostData.getContentType());
c.setRequestProperty(
    HttpProtocolConstants.HEADER_CONTENT_LENGTH,String.valueOf(oPostData.size()));
c.setRequestProperty("Content-Length", Integer.toString(oPostData.size()));
c.setRequestProperty("Content-Type","application/json");
byte [] postDataBytes = jobj.toString().getBytes("UTF-8");
os = c.openOutputStream();
os.write(postDataBytes);
os.flush();      
...