Apache HttpCore, простой сервер для Эха полученных данных post

используя пример класса ElementalHttpServer, найденный здесь:

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

Я могу успешно получать данные post, моя цель-преобразовать полученные данные post в строку, которую я могу распечатать. Я изменил HttpFileHandler следующим образом, используя eneity.getContent() для получения inputStream, но я не уверен, как я могу преобразовать inputStream в строку.

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

}

Спасибо за любые идеи

1 ответов


здесь простой обработчик регистрации консоли; он регистрирует каждый запрос ( не только POST) - как заголовки, так и полезную нагрузку:

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

Регистрация обработчика с помощью org.apache.http.localserver.LocalTestServerElementalHttpServer Это похоже - у вас также есть HttpRequestHandler реализация выше):

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

}