@Override public void start() throws Exception { vertx.createHttpServer().requestHandler(req -> { if (req.uri().equals("/")) { // Serve the index page req.response().sendFile("index.html"); } else if (req.uri().startsWith("/form")) { req.response().setChunked(true); req.setExpectMultipart(true); req.endHandler((v) -> { for (String attr : req.formAttributes().names()) { req.response().write("Got attr " + attr + " : " + req.formAttributes().get(attr) + "\n"); } req.response().end(); }); } else { req.response().setStatusCode(404).end(); } }).listen(8080); } }
private void testParamDecoding(String value) throws UnsupportedEncodingException { server.requestHandler(req -> { req.setExpectMultipart(true); req.endHandler(v -> { MultiMap formAttributes = req.formAttributes(); assertEquals(value, formAttributes.get("param")); }); req.response().end(); }); String postData = "param=" + URLEncoder.encode(value,"UTF-8"); server.listen(onSuccess(server -> { client.post(DEFAULT_HTTP_PORT, DEFAULT_HTTP_HOST, "/", onSuccess(resp -> testComplete())) .putHeader(HttpHeaders.CONTENT_TYPE, HttpHeaders.APPLICATION_X_WWW_FORM_URLENCODED) .putHeader(HttpHeaders.CONTENT_LENGTH, String.valueOf(postData.length())) .write(postData).end(); })); await(); }
@Override public MultiMap formAttributes() { return delegate.formAttributes(); }
})); req.endHandler(v -> { MultiMap attrs = req.formAttributes(); attributeCount.set(attrs.size()); assertEquals("junit-testUserAlias", attrs.get("origin"));
})); req.endHandler(v -> { MultiMap attrs = req.formAttributes(); attributeCount.set(attrs.size()); assertEquals("vert x", attrs.get("framework"));
}); req.endHandler(v -> { MultiMap attrs = req.formAttributes(); attributeCount.set(attrs.size()); req.response().end();
throw new IllegalStateException("Form body not parsed - do you forget to include a BodyHandler?"); MultiMap params = req.formAttributes(); String username = params.get(usernameParam); String password = params.get(passwordParam);
private void buildParams(final HttpRequestBuilder httpRequestBuilder, final HttpServerRequest request, final String contentType) { if (request.params().size() == 0) { httpRequestBuilder.setParams(MultiMap.empty()); } else { httpRequestBuilder.setParams(new MultiMapWrapper(request.params())); } if (HttpContentTypes.isFormContentType(contentType)) { httpRequestBuilder.setFormParamsSupplier(() -> new MultiMapWrapper(request.formAttributes())); } }
void doEnd() { if (failed) { deleteFileUploads(); return; } if (deleteUploadedFilesOnEnd) { context.addBodyEndHandler(x -> deleteFileUploads()); } HttpServerRequest req = context.request(); if (mergeFormAttributes && req.isExpectMultipart()) { req.params().addAll(req.formAttributes()); } context.setBody(body); context.next(); }
void doEnd() { if (failed) { deleteFileUploads(); return; } if (deleteUploadedFilesOnEnd) { context.addBodyEndHandler(x -> deleteFileUploads()); } HttpServerRequest req = context.request(); if (mergeFormAttributes && req.isExpectMultipart()) { req.params().addAll(req.formAttributes()); } context.setBody(body); context.next(); }
private void testParamDecoding(String value) throws UnsupportedEncodingException { server.requestHandler(req -> { req.setExpectMultipart(true); req.endHandler(v -> { MultiMap formAttributes = req.formAttributes(); assertEquals(value, formAttributes.get("param")); }); req.response().end(); }); String postData = "param=" + URLEncoder.encode(value,"UTF-8"); server.listen(onSuccess(server -> { client.post(DEFAULT_HTTP_PORT, DEFAULT_HTTP_HOST, "/") .putHeader(HttpHeaders.CONTENT_TYPE, HttpHeaders.APPLICATION_X_WWW_FORM_URLENCODED) .putHeader(HttpHeaders.CONTENT_LENGTH, String.valueOf(postData.length())) .handler(resp -> { testComplete(); }) .write(postData).end(); })); await(); }
@Override public void handle(RoutingContext context) { HttpServerRequest request = context.request(); if (request.headers().contains(HttpHeaders.UPGRADE, HttpHeaders.WEBSOCKET, true)) { context.next(); return; } // we need to keep state since we can be called again on reroute Boolean handled = context.get(BODY_HANDLED); if (handled == null || !handled) { BHandler handler = new BHandler(context); request.handler(handler); request.endHandler(v -> handler.end()); context.put(BODY_HANDLED, true); } else { // on reroute we need to re-merge the form params if that was desired if (mergeFormAttributes && request.isExpectMultipart()) { request.params().addAll(request.formAttributes()); } context.next(); } }
@Test public void testFormContentTypeIgnoreCase() throws Exception { router.route().handler(rc -> { MultiMap attrs = rc.request().formAttributes(); assertNotNull(attrs); assertEquals(1, attrs.size()); assertEquals("junit-testUserAlias", attrs.get("origin")); rc.response().end(); }); testRequest(HttpMethod.POST, "/", req -> { Buffer buffer = Buffer.buffer(); buffer.appendString("origin=junit-testUserAlias"); req.headers().set("content-length", String.valueOf(buffer.length())); req.headers().set("content-type", "ApPlIcAtIoN/x-WwW-fOrM-uRlEnCoDeD"); req.write(buffer); }, 200, "OK", null); }
@Override public void handle(RoutingContext context) { HttpServerRequest request = context.request(); if (request.headers().contains(HttpHeaders.UPGRADE, HttpHeaders.WEBSOCKET, true)) { context.next(); return; } // we need to keep state since we can be called again on reroute Boolean handled = context.get(BODY_HANDLED); if (handled == null || !handled) { long contentLength = isPreallocateBodyBuffer ? parseContentLengthHeader(request) : -1; BHandler handler = new BHandler(context, contentLength); request.handler(handler); request.endHandler(v -> handler.end()); context.put(BODY_HANDLED, true); } else { // on reroute we need to re-merge the form params if that was desired if (mergeFormAttributes && request.isExpectMultipart()) { request.params().addAll(request.formAttributes()); } context.next(); } }
})); req.endHandler(v -> { MultiMap attrs = req.formAttributes(); attributeCount.set(attrs.size()); assertEquals("junit-testUserAlias", attrs.get("origin"));
@Test public void testFormURLEncoded() throws Exception { router.route().handler(rc -> { MultiMap attrs = rc.request().formAttributes(); assertNotNull(attrs); assertEquals(3, attrs.size()); assertEquals("junit-testUserAlias", attrs.get("origin")); assertEquals("admin@foo.bar", attrs.get("login")); assertEquals("admin", attrs.get("pass word")); rc.response().end(); }); testRequest(HttpMethod.POST, "/", req -> { Buffer buffer = Buffer.buffer(); buffer.appendString("origin=junit-testUserAlias&login=admin%40foo.bar&pass+word=admin"); req.headers().set("content-length", String.valueOf(buffer.length())); req.headers().set("content-type", "application/x-www-form-urlencoded"); req.write(buffer); }, 200, "OK", null); }
})); req.endHandler(v -> { MultiMap attrs = req.formAttributes(); attributeCount.set(attrs.size()); assertEquals("vert x", attrs.get("framework"));
private void testFormMultipartFormData(boolean mergeAttributes) throws Exception { router.route().handler(rc -> { MultiMap attrs = rc.request().formAttributes(); assertNotNull(attrs); assertEquals(2, attrs.size());
}); router.route("/rerouted").handler(rc -> { MultiMap attrs = rc.request().formAttributes(); assertNotNull(attrs); assertEquals(2, attrs.size());
router.clear(); router.route().handler(BodyHandler.create(false).setMergeFormAttributes(mergeAttributes)).handler(rc -> { MultiMap attrs = rc.request().formAttributes(); assertNotNull(attrs); assertEquals(2, attrs.size());