2012-10-24 50 views
1

我的要求是在android中使用Socket接收HTTP Post請求(內容爲JSON文件)。當我打印socket.getInputStream(),我得到:使用套接字接收來自HTTP郵件的數據

POST/HTTP/1.1 
Content length:41 
Content-type: application/json 
Host:10.0.2.15:5001 
Connection: Keep Alive 
User-Agent: Apache HTTPClient/Unavailable(Java 1.4) 

CRLF(Carriage return line feed)- 

Actual Contents of JSON<Data> 

我使用的鏈接https://forums.oracle.com/forums/thread.jspa?messageID=7076709,但它打印唯一的「內容類型:應用/ JSON 主機:10.0」(可用於41的長度)在Logcat。

我的代碼是:

serverSocket = new ServerSocket(portNumber); 
    while(true){ 
    socket = serverSocket.accept(); 
    List<String> headers = new ArrayList<String>(); 
    String str; 
    BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
    while ((str = reader.readLine()) != null) 
    { 
    headers.add(str); 
    if (str.startsWith("Content-Length: ")) 
    { 
    break; // and don't get the next line! 
    } 
    } 
    int contentLength = Integer.parseInt(headers.get(headers.size() - 1).substring("Content-Length: ".length())); 

    for(int j=0;j<headers.size();j++) 
    { 
    Log.d("Headers:",headers.get(j)); 
    } 
    StringBuilder requestContent = new StringBuilder(); 
    int ch; 
    for (int i = 0; i < contentLength; i++) 
    { 
    requestContent.append((char) reader.read()); 
    } 
    Log.d("The request content is: ",""+requestContent); 

這是我的輸出: 接頭: POST/HTTP/1.1 的Content-Length:41

requestContent: 內容類型:應用/ JSON 主持人:10.

有人可以請指導我如何做到這一點?提前致謝!

+0

粘貼代碼太 – waqaslam

+0

雅IVE,爲什麼使用套接字,而不是一個HTTP庫您編輯@Waqas – user1741274

+1

這個問題嗎? – artbristol

回答

2
DefaultHttpServerConnection conn = new DefaultHttpServerConnection(); 
conn.bind(serverSocket.accept(), new BasicHttpParams()); 
HttpRequest request = conn.receiveRequestHeader(); 
conn.receiveRequestEntity((HttpEntityEnclosingRequest)request); 
HttpEntity entity = ((HttpEntityEnclosingRequest)request).getEntity(); 
System.out.println(EntityUtils.toString(entity)); 

http://hc.apache.org/httpcomponents-core-ga/tutorial/pdf/httpcore-tutorial.pdf更多參考