Example usage for io.netty.handler.codec.http.multipart HttpPostRequestEncoder HttpPostRequestEncoder

List of usage examples for io.netty.handler.codec.http.multipart HttpPostRequestEncoder HttpPostRequestEncoder

Introduction

In this page you can find the example usage for io.netty.handler.codec.http.multipart HttpPostRequestEncoder HttpPostRequestEncoder.

Prototype

public HttpPostRequestEncoder(HttpRequest request, boolean multipart) throws ErrorDataEncoderException 

Source Link

Usage

From source file:com.digisky.innerproxy.testclient.HttpSnoopClient.java

License:Apache License

public static void test(Channel ch, String uri, String sjson) {
    HttpRequest request = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.GET, "/");
    request.headers().set(HttpHeaders.Names.HOST, "127.0.0.1");
    request.headers().set(HttpHeaders.Names.CONNECTION, HttpHeaders.Values.CLOSE);
    request.headers().set(HttpHeaders.Names.ACCEPT_ENCODING, HttpHeaders.Values.GZIP);

    request.setMethod(HttpMethod.POST);//w ww .ja  v a 2 s. c o  m
    request.setUri("/" + uri);
    HttpPostRequestEncoder bodyRequestEncoder = null;
    try {
        bodyRequestEncoder = new HttpPostRequestEncoder(request, false);
    } catch (ErrorDataEncoderException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } // false => not multipart
      //***********************************************************************
    try {
        bodyRequestEncoder.addBodyAttribute("val", sjson);
    } catch (ErrorDataEncoderException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    //***********************************************************************
    try {
        request = bodyRequestEncoder.finalizeRequest();
    } catch (ErrorDataEncoderException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    ch.writeAndFlush(request);
    try {
        ch.closeFuture().sync();
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

From source file:com.digisky.outerproxy.testclient.HttpSnoopClient.java

License:Apache License

public static void testWithEncode(Channel ch, String uri, String sjson) {
    HttpRequest request = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.GET, "/");
    request.headers().set(HttpHeaders.Names.HOST, "127.0.0.1");
    request.headers().set(HttpHeaders.Names.CONNECTION, HttpHeaders.Values.CLOSE);
    request.headers().set(HttpHeaders.Names.ACCEPT_ENCODING, HttpHeaders.Values.GZIP);

    request.setMethod(HttpMethod.POST);//from  w  ww .j a v  a 2 s . co m
    request.setUri("/" + uri);
    HttpPostRequestEncoder bodyRequestEncoder = null;
    try {
        bodyRequestEncoder = new HttpPostRequestEncoder(request, false);
    } catch (ErrorDataEncoderException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } // false => not multipart
      //***********************************************************************
    ByteBuf b = Unpooled.buffer();
    b.writeBytes("{}".getBytes());
    try {
        bodyRequestEncoder.addBodyAttribute("val", sjson);
    } catch (ErrorDataEncoderException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    //***********************************************************************
    try {
        request = bodyRequestEncoder.finalizeRequest();
    } catch (ErrorDataEncoderException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    ch.writeAndFlush(request);
    try {
        ch.closeFuture().sync();
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

From source file:io.vertx.ext.web.client.impl.HttpRequestImpl.java

License:Open Source License

private void send(String contentType, Object body, Handler<AsyncResult<HttpResponse<T>>> handler) {

    Future<HttpClientResponse> responseFuture = Future.<HttpClientResponse>future().setHandler(ar -> {
        if (ar.succeeded()) {
            HttpClientResponse resp = ar.result();
            Future<HttpResponse<T>> fut = Future.future();
            fut.setHandler(handler);/*  www  .  j  av  a 2s. c  om*/
            resp.exceptionHandler(err -> {
                if (!fut.isComplete()) {
                    fut.fail(err);
                }
            });
            resp.pause();
            codec.create(ar2 -> {
                resp.resume();
                if (ar2.succeeded()) {
                    BodyStream<T> stream = ar2.result();
                    stream.exceptionHandler(err -> {
                        if (!fut.isComplete()) {
                            fut.fail(err);
                        }
                    });
                    resp.endHandler(v -> {
                        if (!fut.isComplete()) {
                            stream.end();
                            if (stream.result().succeeded()) {
                                fut.complete(new HttpResponseImpl<>(resp, null, stream.result().result()));
                            } else {
                                fut.fail(stream.result().cause());
                            }
                        }
                    });
                    Pump responsePump = Pump.pump(resp, stream);
                    responsePump.start();
                } else {
                    handler.handle(Future.failedFuture(ar2.cause()));
                }
            });
        } else {
            handler.handle(Future.failedFuture(ar.cause()));
        }
    });

    HttpClientRequest req;
    String requestURI;
    if (params != null && params.size() > 0) {
        QueryStringEncoder enc = new QueryStringEncoder(uri);
        params.forEach(param -> {
            enc.addParam(param.getKey(), param.getValue());
        });
        requestURI = enc.toString();
    } else {
        requestURI = uri;
    }
    if (ssl != options.isSsl()) {
        req = client.request(method,
                new RequestOptions().setSsl(ssl).setHost(host).setPort(port).setURI(requestURI));
    } else {
        req = client.request(method, port, host, requestURI);
    }
    req.setFollowRedirects(followRedirects);
    if (headers != null) {
        req.headers().addAll(headers);
    }
    req.exceptionHandler(err -> {
        if (!responseFuture.isComplete()) {
            responseFuture.fail(err);
        }
    });
    req.handler(resp -> {
        if (!responseFuture.isComplete()) {
            responseFuture.complete(resp);
        }
    });
    if (timeout > 0) {
        req.setTimeout(timeout);
    }
    if (body != null) {
        if (contentType != null) {
            String prev = req.headers().get(HttpHeaders.CONTENT_TYPE);
            if (prev == null) {
                req.putHeader(HttpHeaders.CONTENT_TYPE, contentType);
            } else {
                contentType = prev;
            }
        }
        if (body instanceof ReadStream<?>) {
            ReadStream<Buffer> stream = (ReadStream<Buffer>) body;
            if (headers == null || !headers.contains(HttpHeaders.CONTENT_LENGTH)) {
                req.setChunked(true);
            }
            Pump pump = Pump.pump(stream, req);
            stream.exceptionHandler(err -> {
                req.reset();
                if (!responseFuture.isComplete()) {
                    responseFuture.fail(err);
                }
            });
            stream.endHandler(v -> {
                pump.stop();
                req.end();
            });
            pump.start();
        } else {
            Buffer buffer;
            if (body instanceof Buffer) {
                buffer = (Buffer) body;
            } else if (body instanceof MultiMap) {
                try {
                    MultiMap attributes = (MultiMap) body;
                    boolean multipart = "multipart/form-data".equals(contentType);
                    DefaultFullHttpRequest request = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1,
                            io.netty.handler.codec.http.HttpMethod.POST, "/");
                    HttpPostRequestEncoder encoder = new HttpPostRequestEncoder(request, multipart);
                    for (Map.Entry<String, String> attribute : attributes) {
                        encoder.addBodyAttribute(attribute.getKey(), attribute.getValue());
                    }
                    encoder.finalizeRequest();
                    for (String headerName : request.headers().names()) {
                        req.putHeader(headerName, request.headers().get(headerName));
                    }
                    if (encoder.isChunked()) {
                        buffer = Buffer.buffer();
                        while (true) {
                            HttpContent chunk = encoder.readChunk(new UnpooledByteBufAllocator(false));
                            ByteBuf content = chunk.content();
                            if (content.readableBytes() == 0) {
                                break;
                            }
                            buffer.appendBuffer(Buffer.buffer(content));
                        }
                    } else {
                        ByteBuf content = request.content();
                        buffer = Buffer.buffer(content);
                    }
                } catch (Exception e) {
                    throw new VertxException(e);
                }
            } else if (body instanceof JsonObject) {
                buffer = Buffer.buffer(((JsonObject) body).encode());
            } else {
                buffer = Buffer.buffer(Json.encode(body));
            }
            req.end(buffer);
        }
    } else {
        req.end();
    }
}

From source file:io.vertx.ext.web.client.impl.MultipartFormUpload.java

License:Open Source License

public MultipartFormUpload(Context context, MultipartForm parts, boolean multipart) throws Exception {
    this.context = context;
    this.pending = new InboundBuffer<Buffer>(context).emptyHandler(v -> checkEnd()).drainHandler(v -> run())
            .pause();/* ww w. ja va  2  s. co m*/
    this.request = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, io.netty.handler.codec.http.HttpMethod.POST,
            "/");
    this.encoder = new HttpPostRequestEncoder(request, multipart);
    for (FormDataPart formDataPart : parts) {
        if (formDataPart.isAttribute()) {
            encoder.addBodyAttribute(formDataPart.name(), formDataPart.value());
        } else {
            encoder.addBodyFileUpload(formDataPart.name(), formDataPart.filename(),
                    new File(formDataPart.pathname()), formDataPart.mediaType(), formDataPart.isText());
        }
    }
    encoder.finalizeRequest();
}

From source file:io.vertx.webclient.impl.HttpRequestImpl.java

License:Open Source License

private <R> void send(String contentType, Object body, BodyCodec<R> codec,
        Handler<AsyncResult<HttpResponse<R>>> handler) {

    Future<HttpClientResponse> responseFuture = Future.<HttpClientResponse>future().setHandler(ar -> {
        if (ar.succeeded()) {
            HttpClientResponse resp = ar.result();
            Future<HttpResponse<R>> fut = Future.future();
            fut.setHandler(handler);//ww w  .ja  va  2  s  .  c  om
            resp.exceptionHandler(err -> {
                if (!fut.isComplete()) {
                    fut.fail(err);
                }
            });
            resp.pause();
            codec.create(ar2 -> {
                resp.resume();
                if (ar2.succeeded()) {
                    BodyStream<R> stream = ar2.result();
                    stream.exceptionHandler(err -> {
                        if (!fut.isComplete()) {
                            fut.fail(err);
                        }
                    });
                    resp.endHandler(v -> {
                        if (!fut.isComplete()) {
                            stream.end();
                            if (stream.result().succeeded()) {
                                fut.complete(new HttpResponseImpl<>(resp, null, stream.result().result()));
                            } else {
                                fut.fail(stream.result().cause());
                            }
                        }
                    });
                    Pump responsePump = Pump.pump(resp, stream);
                    responsePump.start();
                } else {
                    handler.handle(Future.failedFuture(ar2.cause()));
                }
            });
        } else {
            handler.handle(Future.failedFuture(ar.cause()));
        }
    });

    HttpClientRequest req;
    String requestURI;
    if (params != null && params.size() > 0) {
        QueryStringEncoder enc = new QueryStringEncoder(uri);
        params.forEach(param -> {
            enc.addParam(param.getKey(), param.getValue());
        });
        requestURI = enc.toString();
    } else {
        requestURI = uri;
    }
    if (port != -1) {
        if (host != null) {
            req = client.request(method, port, host, requestURI);
        } else {
            throw new IllegalStateException("Both host and port must be set with an explicit port");
        }
    } else {
        if (host != null) {
            req = client.request(method, host, requestURI);
        } else {
            req = client.request(method, requestURI);
        }
    }
    if (headers != null) {
        req.headers().addAll(headers);
    }
    req.exceptionHandler(err -> {
        if (!responseFuture.isComplete()) {
            responseFuture.fail(err);
        }
    });
    req.handler(resp -> {
        if (!responseFuture.isComplete()) {
            responseFuture.complete(resp);
        }
    });
    if (timeout > 0) {
        req.setTimeout(timeout);
    }
    if (body != null) {
        if (contentType != null) {
            String prev = req.headers().get(HttpHeaders.CONTENT_TYPE);
            if (prev == null) {
                req.putHeader(HttpHeaders.CONTENT_TYPE, contentType);
            } else {
                contentType = prev;
            }
        }
        if (body instanceof ReadStream<?>) {
            ReadStream<Buffer> stream = (ReadStream<Buffer>) body;
            if (headers == null || !headers.contains(HttpHeaders.CONTENT_LENGTH)) {
                req.setChunked(true);
            }
            Pump pump = Pump.pump(stream, req);
            stream.exceptionHandler(err -> {
                req.reset();
                if (!responseFuture.isComplete()) {
                    responseFuture.fail(err);
                }
            });
            stream.endHandler(v -> {
                pump.stop();
                req.end();
            });
            pump.start();
        } else {
            Buffer buffer;
            if (body instanceof Buffer) {
                buffer = (Buffer) body;
            } else if (body instanceof MultiMap) {
                try {
                    MultiMap attributes = (MultiMap) body;
                    boolean multipart = "multipart/form-data".equals(contentType);
                    DefaultFullHttpRequest request = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1,
                            io.netty.handler.codec.http.HttpMethod.POST, "/");
                    HttpPostRequestEncoder encoder = new HttpPostRequestEncoder(request, multipart);
                    for (Map.Entry<String, String> attribute : attributes) {
                        encoder.addBodyAttribute(attribute.getKey(), attribute.getValue());
                    }
                    encoder.finalizeRequest();
                    for (String headerName : request.headers().names()) {
                        req.putHeader(headerName, request.headers().get(headerName));
                    }
                    if (encoder.isChunked()) {
                        buffer = Buffer.buffer();
                        while (true) {
                            HttpContent chunk = encoder.readChunk(new UnpooledByteBufAllocator(false));
                            ByteBuf content = chunk.content();
                            if (content.readableBytes() == 0) {
                                break;
                            }
                            buffer.appendBuffer(Buffer.buffer(content));
                        }
                    } else {
                        ByteBuf content = request.content();
                        buffer = Buffer.buffer(content);
                    }
                } catch (Exception e) {
                    throw new VertxException(e);
                }
            } else if (body instanceof JsonObject) {
                buffer = Buffer.buffer(((JsonObject) body).encode());
            } else {
                buffer = Buffer.buffer(Json.encode(body));
            }
            req.end(buffer);
        }
    } else {
        req.end();
    }
}