我创建了一个将一些数据发送到安全网络的应用程序。
在服务器端,他们需要将数据作为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();
请帮我解决这个问题。
答案 0 :(得分:3)
我猜原因是"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");
另一种选择(BTW它将是执行此特定任务的最合适方式)是使用“multipart / form-data”POST类型。然而,如果你以前从未在BB上做过这件事,那将会有点难以实现。
答案 1 :(得分:1)
您必须为您的网址添加适当的后缀 例如:如果您使用模拟器:https://gmail.com/; deviceside = true等
答案 2 :(得分:0)
我有同样的问题,但最终找到解决方案:
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();