HTTP POST不会返回预期的JSON响应

时间:2011-09-01 08:40:23

标签: json http blackberry java-me

我已经为HTTP Post粘贴了一个代码片段,我将多部分邮件发送到需要身份验证的服务器。我期待一个JSON响应,但是当我运行它时,我总是以HTML格式获取登录页面。

public final class MyScreen extends MainScreen {
 private RichTextField _Output;
 public MyScreen() {
 // Set the displayed title of the screen
 setTitle("MyTitle");
 _Output = new RichTextField();
 add(_Output);
 addMenuItem(_GetDataAction);
}


 protected MenuItem _GetDataAction = new MenuItem("GetData", 100000, 10) {
 public void run() {
  String URL = "<Sample URL Goes Here>";
  ServiceRequestThread svc = new ServiceRequestThread(URL,
  (MyScreen) UiApplication.getUiApplication()
   .getActiveScreen());
  svc.start();
  }
 };


   public void updateDestination(final String text) {
  UiApplication.getUiApplication().invokeLater(new Runnable() {
   public void run() {
  _Output.setText(text);
   }
    });
    }
    }


   class ServiceRequestThread extends Thread {
   protected String _URL;
   protected MyScreen _Dest = null;
   protected URLEncodedPostData _PostData = null;
   StringBuffer writer = new StringBuffer();
   public void setPOSTData(URLEncodedPostData data) {
   _PostData = data;
    }
    public ServiceRequestThread(String URL, MyScreen screen) {
    super();
    _Dest = screen;
    _URL = URL;
     }
        public void run() {

         try
         {
    String boundary = "SATBA";
     String twoHyphens = "--";
     String data1 = "{\"IMPORTING\":{ \"IN_COUNTRY_CODE\":\"US\"}}";
     String CRLF = "\r\n";
    byte[] encoded = Base64OutputStream.encode
    ("User:password".getBytes(), 0, "User:password".length(), false,false);

    "Prepare the data for post"

     writer.append("--" + boundary).append(CRLF);
     writer.append("Content-Disposition: form-data; name=\"param\"").append(
     CRLF);
     writer.append("Content-Type: text/json; charset=" + "UTF-8").append(CRLF);
     writer.append("Content-Transfer-Encoding: 8bit").append(CRLF);
     writer.append("Request-Id:Abcd123456" ).append(CRLF);
     writer.append("Request-Type:rfc_json").append(CRLF);
     writer.append("function:00163E0136C01EE0AE8B059433A71727")
     .append(CRLF);
      writer.append(CRLF);
     writer.append(data1).append(CRLF);
      writer.append("--" + boundary + "--").append(CRLF);
     String string = new String(writer);

    HttpConnection conn1 = (HttpConnection)Connector.open(_URL,Connector.READ_WRITE);
   conn1.setRequestMethod(HttpConnection.POST);
  conn1.setRequestProperty("Authorization", "Basic "+ new String(encoded));
  conn1.setRequestProperty("Content-Type","multipart/mixed; boundary=" + boundary);

   OutputStreamWriter osw = new OutputStreamWriter(conn1.openOutputStream(), "UTF-8");
   osw.write(string);
   osw.flush();
   osw.close();

   int responseCode = conn1.getResponseCode();
   if (responseCode == HttpConnection.HTTP_OK) {
   InputStream data = conn1.openInputStream();
   StringBuffer raw = new StringBuffer();
   byte[] buf = new byte[4096];
   int nRead = data.read(buf);
   while (nRead > 0) {
   raw.append(new String(buf, 0, nRead));
   nRead = data.read(buf);
    }
   _Dest.updateDestination(raw.toString());
    } else {
   _Dest.updateDestination("responseCode="
   + Integer.toString(responseCode));
     }
    }
     catch( IOException e)
       {
    e.printStackTrace();
   _Dest.updateDestination("Exception:"+e.toString());
    }
     }
            }

1 个答案:

答案 0 :(得分:2)

原来代码完全没问题,问题出现在rim.public属性文件中application.handler.http.AuthenticationSupport设置为true,因此没有登录。

现在我将其设置为false并获得正确的回复。