【问题标题】:I am sending data over HTTPS but the server side says it is not receiving it我正在通过 HTTPS 发送数据,但服务器端说它没有收到它
【发布时间】:2011-09-01 14:00:03
【问题描述】:

我创建了一个将一些数据发送到安全网络的应用程序。

在服务器端,他们需要将数据作为 JSON 对象。为此,我将数据创建为 JSON 对象并将该数据写入连接的OutputStream

但是服务器端的响应告诉它没有得到我传递的数据。

正在使用的代码 sn-p 如下所示:

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();

请帮我解决问题。

【问题讨论】:

  • 不..我已经结束了工作。

标签: blackberry java-me blackberry-eclipse-plugin


【解决方案1】:

我猜原因是"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");

另一个选项(顺便说一句,这将是执行此特定任务的最合适的方法)是使用“multipart/form-data”POST 类型。但是,如果您以前从未在 BB 上做过,那么实现它会有点困难。

【讨论】:

  • 感谢您的宝贵回复..我尝试了您的解决方案..但不幸的是我仍然没有得到预期的输出..这里的问题实际上是我不知道数据接受和服务器端的解析方法..只认为我知道数据必须是json格式..like {"header":{"clientName":"clientName","clientVersion":"clientVersion"},"data" :{//一些json数据数组}..并且认为正在以这种格式发送..
  • @Tijo K Varghese:听起来您不确定服务器对您的期望是什么(例如,对此没有规范)。在这种情况下,如何完成这项任务?你还要继续猜吗?
  • 你说得对..我已经给他们发送了正确的文件,以便将数据发送到服务器端..无论如何感谢您的回复..
  • @Tijo K Varghese:是的,这是正确的方法 - 首先要求提供规范。 :) 无论如何,如果您觉得我的回答有帮助,请点赞(稍后,当您的 StackOverflow 声誉允许时)。
【解决方案2】:

您必须将适当的后缀附加到您的网址 例如:如果您使用模拟器,请使用:https://gmail.com/;deviceside=true 等

【讨论】:

  • @jisson 感谢您的回答..我尝试了您提供的解决方案..但它没有回答我的问题..我的问题是我正在发送带有请求的 json 数据。 ..但是在服务器端数据si没有得到..为什么会发生这种情况..??除了将数据写入连接对象输出流之外,还有其他方法可以将数据发送到安全连接..???@987654321 @
  • @jisson:谢谢..现在我得到了链接..但是该链接并没有说明如何将数据设置为 httpsConnection..无论如何感谢您发送链接..跨度>
  • 您使用的是什么类型的服务器。
【解决方案3】:

我也有同样的问题,但终于找到了解决方案:

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();      

【讨论】:

  • 谢谢parag..我会在我试过代码后通知你结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-13
  • 2016-05-14
相关资源
最近更新 更多