2011-08-26 10 views
8

Utilizzando l'esempio di classe ElementalHttpServer trovato qui:Apache HttpCore, semplice server per riprendere dati post ricevuti

https://hc.apache.org/httpcomponents-core-4.3.x/httpcore/examples/org/apache/http/examples/ElementalHttpServer.java

Sono in grado di ricevere correttamente dati post, il mio obiettivo è quello di convertire i dati post ricevuti in un stringa che posso stampare. Ho modificato HttpFileHandler come segue, usando eneity.getContent() per ottenere inputStream, ma non sono sicuro di come posso convertire inputStream in una stringa.

static class HttpFileHandler implements HttpRequestHandler { 

    private final String docRoot; 

    public HttpFileHandler(final String docRoot) { 
    super(); 
    this.docRoot = docRoot; 
    } 

    public void handle(
     final HttpRequest request, 
     final HttpResponse response, 
     final HttpContext context) throws HttpException, IOException { 

    String method = request.getRequestLine().getMethod().toUpperCase(Locale.ENGLISH); 
    if (!method.equals("GET") && !method.equals("HEAD") && !method.equals("POST")) { 
     throw new MethodNotSupportedException(method + " method not supported"); 
    } 
    String target = request.getRequestLine().getUri(); 

    if (request instanceof HttpEntityEnclosingRequest) { 
     HttpEntity entity = ((HttpEntityEnclosingRequest) request).getEntity(); 
     byte[] entityContent = EntityUtils.toByteArray(entity); 
     InputStream inputStream = entity.getContent(); 

     String str= inputStream.toString(); 
     byte[] b3=str.getBytes(); 
     String st = new String(b3); 
     System.out.println(st); 
     for(int i=0;i<b3.length;i++) { 
     System.out.print(b3[i]+"\t"); 
     } 
     System.out.println("Incoming entity content (bytes): " + entityContent.length); 
    } 
} 

}

Grazie per tutte le idee

risposta

10

è semplice gestore di logging console; si registra ogni richiesta (non solo POST) - sia le intestazioni e payload:

package com.mycompany; 

import org.apache.http.*; 
import org.apache.http.entity.StringEntity; 
import org.apache.http.protocol.HttpContext; 
import org.apache.http.protocol.HttpRequestHandler; 
import org.apache.http.util.EntityUtils; 
import org.omg.CORBA.Request; 

import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 

/** 
* Created by IntelliJ IDEA. 
* User: Piotrek 
* To change this template use File | Settings | File Templates. 
*/ 
public class LoggingHandler implements HttpRequestHandler { 
    public void handle(HttpRequest httpRequest, HttpResponse httpResponse, HttpContext httpContext) throws HttpException, IOException { 

     System.out.println(""); // empty line before each request 
     System.out.println(httpRequest.getRequestLine()); 
     System.out.println("-------- HEADERS --------"); 
     for(Header header: httpRequest.getAllHeaders()) { 
      System.out.println(header.getName() + " : " + header.getValue()); 
     } 
     System.out.println("--------"); 

     HttpEntity entity = null; 
     if (httpRequest instanceof HttpEntityEnclosingRequest) 
      entity = ((HttpEntityEnclosingRequest)httpRequest).getEntity(); 

     // For some reason, just putting the incoming entity into 
     // the response will not work. We have to buffer the message. 
     byte[] data; 
     if (entity == null) { 
      data = new byte [0]; 
     } else { 
      data = EntityUtils.toByteArray(entity); 
     } 

     System.out.println(new String(data)); 

     httpResponse.setEntity(new StringEntity("dummy response")); 
    } 
} 

Registrazione del gestore utilizzando org.apache.http.localserver.LocalTestServer (con ElementalHttpServer è simile - si hanno anche HttpRequestHandler implementazione sopra):

public static void main(String[] args) throws Exception { 
    LocalTestServer server = new LocalTestServer(null, null); 

    try { 
     server.start();  

     server.register("/*", new LoggingHandler()); 
     server.awaitTermination(3600 * 1000); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } finally { 
     server.stop(); 
    } 

} 
+0

che funziona perfettamente, grazie mille !! – Hoofamon

+0

Prego :) –

Problemi correlati