2011-08-26 8 views
8

Utilización de la clase ejemplo ElementalHttpServer encontrar aquí:Apache httpcore, servidores simple eco de datos de correos recibidos

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

soy capaz de recibir correctamente datos de envío, mi objetivo es convertir los datos de correos recibidos en un cadena que puedo imprimir. He modificado el HttpFileHandler de la siguiente manera, usando eneity.getContent() para obtener el inputStream, pero no estoy seguro de cómo puedo convertir el inputStream en un String.

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

}

Gracias por cualquier idea

Respuesta

10

aquí es simple controlador de conexión de la consola; registra cada petición (no sólo POST) - ambas cabeceras y carga útil:

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")); 
    } 
} 

registro de controlador utilizando org.apache.http.localserver.LocalTestServer (con ElementalHttpServer es similar - también tiene HttpRequestHandler implementación anterior):

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

que funciona perfectamente, muchas gracias !! – Hoofamon

+0

De nada :) –

Cuestiones relacionadas