2013-08-29 4 views
1

나는 안드로이드 애플 리케이션에서 일하고 있으며, 친구는 훨씬 복잡한 .NET 서버 코드로 서비스를하고있다. 지금 내가 POST로 전송 한 JSON 데이터와 그로부터받은 JSON 데이터가 HTTPS를 초과해야한다는 사실을 알게되었습니다. 내가 찾은 모든 자습서는 표준 HTTP 용이거나 보안 연결을 처리하기위한 여러 클래스 작성이 필요합니다. 나는 안드로이드 개발에 처음이기 때문에 이상적이지는 않을 것이다. 현재 코드가 보안 연결없이 서버에서 데이터를 가져올 지 확신 할 수 없습니다.Android에서 .NET 서버로 HTTPS Post 요청을하는 방법은 무엇입니까?

어디서부터 시작해야합니까? 어떤 변화가 필요합니까?

필자는 필요에 따라 추가 정보를 제공해 드리겠습니다. 저는이 코드를 1 주일 이상 사로 잡았습니다. 정보를 요청할 때 가능한 한 서술 적으로 작성하십시오.

08-29 12:47:16.697: W/ActivityThread(9547): Application com.barjinx.barjinx can be debugged on port 8100... 
08-29 12:47:17.033: D/libEGL(9547): loaded /vendor/lib/egl/libEGL_POWERVR_SGX540_120.so 
08-29 12:47:17.057: D/libEGL(9547): loaded /vendor/lib/egl/libGLESv1_CM_POWERVR_SGX540_120.so 
08-29 12:47:17.072: D/libEGL(9547): loaded /vendor/lib/egl/libGLESv2_POWERVR_SGX540_120.so 
08-29 12:47:17.236: D/OpenGLRenderer(9547): Enabling debug mode 0 
08-29 12:47:27.486: D/dalvikvm(9547): GC_CONCURRENT freed 92K, 2% free 9133K/9256K, paused 16ms+9ms, total 50ms 
08-29 12:47:27.525: V/EventsActivity(9547): JSON Created: {"search":{"GeoLat":"29.7529","GeoZip":"78757","SearchTerm":"Rangers","GeoLong":"-97.7333","UserKey":"MattCoker"}} 
08-29 12:47:36.361: I/HttpClient(9547): HTTPResponse received in [8826ms] 
08-29 12:47:36.369: W/System.err(9547): org.json.JSONException: End of input at character 0 of 
08-29 12:47:36.393: D/dalvikvm(9547): GC_CONCURRENT freed 230K, 3% free 9316K/9576K, paused 3ms+9ms, total 32ms 
08-29 12:47:36.408: W/System.err(9547):  at org.json.JSONTokener.syntaxError(JSONTokener.java:450) 
08-29 12:47:36.408: W/System.err(9547):  at org.json.JSONTokener.nextValue(JSONTokener.java:97) 
08-29 12:47:36.408: W/System.err(9547):  at org.json.JSONObject.<init>(JSONObject.java:154) 
08-29 12:47:36.408: W/System.err(9547):  at org.json.JSONObject.<init>(JSONObject.java:171) 
08-29 12:47:36.408: W/System.err(9547):  at com.barjinx.barjinx.HttpClient.SendHttpPost(HttpClient.java:53) 
08-29 12:47:36.408: W/System.err(9547):  at com.barjinx.barjinx.EventsActivity$GetEventsDataTask.sendUserJSON(EventsActivity.java:172) 
08-29 12:47:36.408: W/System.err(9547):  at com.barjinx.barjinx.EventsActivity$GetEventsDataTask.doInBackground(EventsActivity.java:142) 
08-29 12:47:36.408: W/System.err(9547):  at com.barjinx.barjinx.EventsActivity$GetEventsDataTask.doInBackground(EventsActivity.java:1) 
08-29 12:47:36.408: W/System.err(9547):  at android.os.AsyncTask$2.call(AsyncTask.java:287) 
08-29 12:47:36.408: W/System.err(9547):  at java.util.concurrent.FutureTask.run(FutureTask.java:234) 
08-29 12:47:36.416: W/System.err(9547):  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
08-29 12:47:36.416: W/System.err(9547):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
08-29 12:47:36.416: W/System.err(9547):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
08-29 12:47:36.416: W/System.err(9547):  at java.lang.Thread.run(Thread.java:856) 
08-29 12:47:36.416: W/dalvikvm(9547): threadid=11: thread exiting with uncaught exception (group=0x41e13930) 
08-29 12:47:36.424: E/AndroidRuntime(9547): FATAL EXCEPTION: AsyncTask #1 
08-29 12:47:36.424: E/AndroidRuntime(9547): java.lang.RuntimeException: An error occured while executing doInBackground() 
08-29 12:47:36.424: E/AndroidRuntime(9547):  at android.os.AsyncTask$3.done(AsyncTask.java:299) 
08-29 12:47:36.424: E/AndroidRuntime(9547):  at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352) 
08-29 12:47:36.424: E/AndroidRuntime(9547):  at java.util.concurrent.FutureTask.setException(FutureTask.java:219) 
08-29 12:47:36.424: E/AndroidRuntime(9547):  at java.util.concurrent.FutureTask.run(FutureTask.java:239) 
08-29 12:47:36.424: E/AndroidRuntime(9547):  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
08-29 12:47:36.424: E/AndroidRuntime(9547):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
08-29 12:47:36.424: E/AndroidRuntime(9547):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
08-29 12:47:36.424: E/AndroidRuntime(9547):  at java.lang.Thread.run(Thread.java:856) 
08-29 12:47:36.424: E/AndroidRuntime(9547): Caused by: java.lang.NullPointerException 
08-29 12:47:36.424: E/AndroidRuntime(9547):  at com.barjinx.barjinx.EventsActivity$GetEventsDataTask.sendUserJSON(EventsActivity.java:173) 
08-29 12:47:36.424: E/AndroidRuntime(9547):  at com.barjinx.barjinx.EventsActivity$GetEventsDataTask.doInBackground(EventsActivity.java:142) 
08-29 12:47:36.424: E/AndroidRuntime(9547):  at com.barjinx.barjinx.EventsActivity$GetEventsDataTask.doInBackground(EventsActivity.java:1) 
08-29 12:47:36.424: E/AndroidRuntime(9547):  at android.os.AsyncTask$2.call(AsyncTask.java:287) 
08-29 12:47:36.424: E/AndroidRuntime(9547):  at java.util.concurrent.FutureTask.run(FutureTask.java:234) 
08-29 12:47:36.424: E/AndroidRuntime(9547):  ... 4 more 
08-29 12:48:08.900: I/Process(9547): Sending signal. PID: 9547 SIG: 9 
08-29 12:48:45.353: W/ActivityThread(9753): Application com.barjinx.barjinx is waiting for the debugger on port 8100... 
08-29 12:48:45.361: I/System.out(9753): Sending WAIT chunk 
08-29 12:48:45.486: I/dalvikvm(9753): Debugger is active 
08-29 12:48:45.564: I/System.out(9753): Debugger has connected 
08-29 12:48:45.564: I/System.out(9753): waiting for debugger to settle... 
08-29 12:48:45.768: I/System.out(9753): waiting for debugger to settle... 
08-29 12:48:45.971: I/System.out(9753): waiting for debugger to settle... 
08-29 12:48:46.166: I/System.out(9753): waiting for debugger to settle... 
08-29 12:48:46.369: I/System.out(9753): waiting for debugger to settle... 
08-29 12:48:46.572: I/System.out(9753): waiting for debugger to settle... 
08-29 12:48:46.768: I/System.out(9753): waiting for debugger to settle... 
08-29 12:48:46.971: I/System.out(9753): debugger has settled (1326) 
08-29 12:48:47.510: D/libEGL(9753): loaded /vendor/lib/egl/libEGL_POWERVR_SGX540_120.so 
08-29 12:48:47.510: D/libEGL(9753): loaded /vendor/lib/egl/libGLESv1_CM_POWERVR_SGX540_120.so 
08-29 12:48:47.518: D/libEGL(9753): loaded /vendor/lib/egl/libGLESv2_POWERVR_SGX540_120.so 
08-29 12:48:47.588: D/OpenGLRenderer(9753): Enabling debug mode 0 
08-29 12:49:09.189: D/dalvikvm(9753): GC_CONCURRENT freed 80K, 2% free 9131K/9240K, paused 5ms+3ms, total 24ms 
08-29 12:49:09.275: V/EventsActivity(9753): JSON Created: {"search":{"GeoLat":"29.7529","GeoZip":"78757","SearchTerm":"Rangers","GeoLong":"-97.7333","UserKey":"MattCoker"}} 
:

는 HttpClient.java

public class HttpClient { 

public static final String TAG = HttpClient.class.getSimpleName(); 

public static JSONObject SendHttpPost(String URL, JSONObject jsonObjSend) { 

    try { 
     DefaultHttpClient httpclient = new DefaultHttpClient(); 
     HttpPost httpPostRequest = new HttpPost(URL); 

     StringEntity se = new StringEntity(jsonObjSend.toString()); 

     // Set HTTP parameters 
     httpPostRequest.setEntity(se); 
     httpPostRequest.setHeader("Accept", "application/json"); 
     httpPostRequest.setHeader("Content-type", "application/json"); 

     long t = System.currentTimeMillis(); 
     HttpResponse response = (HttpResponse) httpclient.execute(httpPostRequest); 
     Log.i(TAG, "HTTPResponse received in [" + (System.currentTimeMillis()-t) + "ms]"); 

     // Get hold of the response entity (-> the data): 
     HttpEntity entity = response.getEntity(); 

     if (entity != null) { 
      // Read the content stream 
      InputStream instream = entity.getContent(); 

      // convert content stream to a String 
      String resultString= convertStreamToString(instream); 
      Log.v("After converting Stream to String", resultString); 
      instream.close(); 

      // Transform the String into a JSONObject 
      JSONObject jsonObjRecv = new JSONObject(resultString); 

      // Raw DEBUG output of our received JSON object: 
      Log.i(TAG,"<JSONObject>\n"+jsonObjRecv.toString()+"\n</JSONObject>"); 

      return jsonObjRecv; 

     } 

    } 
    catch (Exception e) 
    { 
     // More about HTTP exception handling in another tutorial. 
     // For now we just print the stack trace. 
     e.printStackTrace(); 
    } 
    return null; 
} 


private static String convertStreamToString(InputStream is) { 
    /* 
    * To convert the InputStream to String we use the BufferedReader.readLine() 
    * method. We iterate until the BufferedReader return null which means 
    * there's no more data to read. Each line will appended to a StringBuilder 
    * and returned as String. 
    * 
    * (c) public domain: http://senior.ceng.metu.edu.tr/2009/praeda/2009/01/11/a-simple-restful-client-at-android/ 
    */ 
    BufferedReader reader = new BufferedReader(new InputStreamReader(is)); 
    StringBuilder sb = new StringBuilder(); 

    String line = null; 
    try { 
     while ((line = reader.readLine()) != null) { 
      sb.append(line + "\n"); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally { 
     try { 
      is.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
    return sb.toString(); 
} 

}는

로그 캣 에러는 다음 몇 JSON 데이터를 초기화한다 (정확하게 제작 된)와 버튼 클릭에 시작하는 HttpClient.java 사용

+0

는'response.getEntity()이다'테스트 호출에서 null을 반환? 'response.getEntity(). getContentLength()'호출의 값은 무엇입니까? – trebron

+0

글쎄, 나는 그것이 "가치"를 가지고 있다고 생각하지만, 나는 내용 부분을 파고 보면 내용 길이가 0이다. 그리고 contentType은 null이다. – mattcoker

+0

'response.getStatusLine(). getStatusCode()'의 값은 무엇입니까? – trebron

답변

관련 문제