private void sendEmptyFileInputStream(boolean disableZeroCopy) throws Exception { File file = getClasspathFile("empty.txt"); try (AsyncHttpClient c = asyncHttpClient(config().setDisableZeroCopy(disableZeroCopy))) { InputStream inputStream = new BufferedInputStream(new FileInputStream(file)); Request r = post("http://localhost" + ":" + port1 + "/upload") .addBodyPart(new InputStreamPart("file", inputStream, file.getName(), file.length(), "text/plain", UTF_8)).build(); Response res = c.executeRequest(r).get(); assertEquals(res.getStatusCode(), 200); } }
private void sendFileInputStream(boolean useContentLength, boolean disableZeroCopy) throws Exception { File file = getClasspathFile("textfile.txt"); try (AsyncHttpClient c = asyncHttpClient(config().setDisableZeroCopy(disableZeroCopy))) { InputStream inputStream = new BufferedInputStream(new FileInputStream(file)); InputStreamPart part; if (useContentLength) { part = new InputStreamPart("file", inputStream, file.getName(), file.length()); } else { part = new InputStreamPart("file", inputStream, file.getName()); } Request r = post("http://localhost" + ":" + port1 + "/upload").addBodyPart(part).build(); Response res = c.executeRequest(r).get(); assertEquals(res.getStatusCode(), 200); } }
@Test public void testSignatureBaseStringWithProperlyEncodedUri() throws NoSuchAlgorithmException { Request request = post("http://example.com/request?b5=%3D%253D&a3=a&c%40=&a2=r%20b") .addFormParam("c2", "") .addFormParam("a3", "2 q") .build(); testSignatureBaseString(request); testSignatureBaseStringWithEncodableOAuthToken(request); }
@Test public void testSignatureBaseStringWithRawUri() throws NoSuchAlgorithmException { // note: @ is legal so don't decode it into %40 because it won't be // encoded back // note: we don't know how to fix a = that should have been encoded as // %3D but who would be stupid enough to do that? Request request = post("http://example.com/request?b5=%3D%253D&a3=a&c%40=&a2=r b") .addFormParam("c2", "") .addFormParam("a3", "2 q") .build(); testSignatureBaseString(request); testSignatureBaseStringWithEncodableOAuthToken(request); }
@Test public void testPostCalculateSignature() throws UnsupportedEncodingException { StaticOAuthSignatureCalculator calc = // new StaticOAuthSignatureCalculator(// new ConsumerKey(CONSUMER_KEY, CONSUMER_SECRET), new RequestToken(TOKEN_KEY, TOKEN_SECRET), NONCE, TIMESTAMP); final Request req = post("http://photos.example.net/photos") .addFormParam("file", "vacation.jpg") .addFormParam("size", "original") .setSignatureCalculator(calc) .build(); // From the signature tester, POST should look like: // normalized parameters: // file=vacation.jpg&oauth_consumer_key=dpf43f3p2l4k3l03&oauth_nonce=kllo9940pd9333jh&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1191242096&oauth_token=nnch734d00sl2jdk&oauth_version=1.0&size=original // signature base string: // POST&http%3A%2F%2Fphotos.example.net%2Fphotos&file%3Dvacation.jpg%26oauth_consumer_key%3Ddpf43f3p2l4k3l03%26oauth_nonce%3Dkllo9940pd9333jh%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1191242096%26oauth_token%3Dnnch734d00sl2jdk%26oauth_version%3D1.0%26size%3Doriginal // signature: wPkvxykrw+BTdCcGqKr+3I+PsiM= // header: OAuth // realm="",oauth_version="1.0",oauth_consumer_key="dpf43f3p2l4k3l03",oauth_token="nnch734d00sl2jdk",oauth_timestamp="1191242096",oauth_nonce="kllo9940pd9333jh",oauth_signature_method="HMAC-SHA1",oauth_signature="wPkvxykrw%2BBTdCcGqKr%2B3I%2BPsiM%3D" String authHeader = req.getHeaders().get(AUTHORIZATION); Matcher m = Pattern.compile("oauth_signature=\"(.+?)\"").matcher(authHeader); assertEquals(m.find(), true); String encodedSig = m.group(1); String sig = URLDecoder.decode(encodedSig, "UTF-8"); assertEquals(sig, "wPkvxykrw+BTdCcGqKr+3I+PsiM="); }
Request r = post("http://localhost" + ":" + port1 + "/upload") .addBodyPart(new FilePart("file1", testResource1File, "text/plain", UTF_8)) .addBodyPart(new FilePart("file2", testResource2File, "application/x-gzip", null))
private void doTestWithInputStreamBodyGenerator(InputStream is) throws Throwable { try { try (AsyncHttpClient c = asyncHttpClient(httpClientBuilder())) { ListenableFuture<Response> responseFuture = c.executeRequest(post(getTargetUrl()).setBody(new InputStreamBodyGenerator(is))); waitForAndAssertResponse(responseFuture); } } finally { is.close(); } }
@Test public void negativeContentTypeTest() throws Exception { AsyncHttpClientConfig config = config() .setConnectTimeout(100) .setMaxConnections(50) .setRequestTimeout(5 * 60 * 1000) // 5 minutes .build(); try (AsyncHttpClient client = asyncHttpClient(config)) { RequestBuilder requestBuilder = post(getTargetUrl()) .setHeader("Content-Type", "message/rfc822") .setBody(new InputStreamBodyGenerator(new ByteArrayInputStream(MY_MESSAGE.getBytes()))); Future<Response> future = client.executeRequest(requestBuilder.build()); System.out.println("waiting for response"); Response response = future.get(); assertEquals(response.getStatusCode(), 200); assertEquals(response.getResponseBody(), MY_MESSAGE); } } }
@Test public void postWithHeadersAndFormParams() throws Throwable { withClient().run(client -> withServer(server).run(server -> { HttpHeaders h = new DefaultHttpHeaders(); h.add(CONTENT_TYPE, HttpHeaderValues.APPLICATION_X_WWW_FORM_URLENCODED); Map<String, List<String>> m = new HashMap<>(); for (int i = 0; i < 5; i++) { m.put("param_" + i, Collections.singletonList("value_" + i)); } Request request = post(getTargetUrl()).setHeaders(h).setFormParams(m).build(); server.enqueueEcho(); client.executeRequest(request, new AsyncCompletionHandlerAdapter() { @Override public Response onCompleted(Response response) { assertEquals(response.getStatusCode(), 200); for (int i = 1; i < 5; i++) { assertEquals(response.getHeader("X-param_" + i), "value_" + i); } return response; } }).get(TIMEOUT, SECONDS); })); }
@Test public void postChineseChar() throws Throwable { withClient().run(client -> withServer(server).run(server -> { HttpHeaders h = new DefaultHttpHeaders(); h.add(CONTENT_TYPE, HttpHeaderValues.APPLICATION_X_WWW_FORM_URLENCODED); String chineseChar = "是"; Map<String, List<String>> m = new HashMap<>(); m.put("param", Collections.singletonList(chineseChar)); Request request = post(getTargetUrl()).setHeaders(h).setFormParams(m).build(); server.enqueueEcho(); client.executeRequest(request, new AsyncCompletionHandlerAdapter() { @Override public Response onCompleted(Response response) { assertEquals(response.getStatusCode(), 200); String value; try { // headers must be encoded value = URLDecoder.decode(response.getHeader("X-param"), StandardCharsets.UTF_8.name()); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } assertEquals(value, chineseChar); return response; } }).get(TIMEOUT, SECONDS); })); }
private void doTestWithFeedableBodyGenerator(InputStream is) throws Throwable { try { try (AsyncHttpClient c = asyncHttpClient(httpClientBuilder())) { final FeedableBodyGenerator feedableBodyGenerator = new UnboundedQueueFeedableBodyGenerator(); Request r = post(getTargetUrl()).setBody(feedableBodyGenerator).build(); ListenableFuture<Response> responseFuture = c.executeRequest(r); feed(feedableBodyGenerator, is); waitForAndAssertResponse(responseFuture); } } finally { is.close(); } }
@Test public void testNoDirectRequestBodyWithProxy() throws Exception { AsyncHttpClientConfig config = config() .setFollowRedirect(true) .setProxyServer(proxyServer("localhost", port1).build()) .setUseInsecureTrustManager(true) .build(); try (AsyncHttpClient asyncHttpClient = asyncHttpClient(config)) { Response r = asyncHttpClient.executeRequest(post(getTargetUrl2()).setBody(new ByteArrayBodyGenerator(LARGE_IMAGE_BYTES))).get(); assertEquals(r.getStatusCode(), 200); } }
private void sendEmptyFile0(boolean disableZeroCopy) throws Exception { File file = getClasspathFile("empty.txt"); try (AsyncHttpClient c = asyncHttpClient(config().setDisableZeroCopy(disableZeroCopy))) { Request r = post("http://localhost" + ":" + port1 + "/upload") .addBodyPart(new FilePart("file", file, "text/plain", UTF_8)).build(); Response res = c.executeRequest(r).get(); assertEquals(res.getStatusCode(), 200); } }
@Test public void testDecompressBodyWithProxy() throws Exception { AsyncHttpClientConfig config = config() .setFollowRedirect(true) .setProxyServer(proxyServer("localhost", port1).build()) .setUseInsecureTrustManager(true) .build(); try (AsyncHttpClient asyncHttpClient = asyncHttpClient(config)) { String body = "hello world"; Response r = asyncHttpClient.executeRequest(post(getTargetUrl2()) .setHeader("X-COMPRESS", "true") .setBody(body)).get(); assertEquals(r.getStatusCode(), 200); assertEquals(r.getResponseBody(), body); } }
private void doTestPositive(final int status) throws Exception { ResponseFilter responseFilter = new ResponseFilter() { @Override public <T> FilterContext<T> filter(FilterContext<T> ctx) { // pass on the x-expect-get and remove the x-redirect // headers if found in the response ctx.getResponseHeaders().get("x-expect-get"); ctx.getRequest().getHeaders().add("x-expect-get", "true"); ctx.getRequest().getHeaders().remove("x-redirect"); return ctx; } }; try (AsyncHttpClient p = asyncHttpClient(config().setFollowRedirect(true).addResponseFilter(responseFilter))) { Request request = post(getTargetUrl()).addFormParam("q", "a b").addHeader("x-redirect", +status + "@" + "http://localhost:" + port1 + "/foo/bar/baz").build(); Future<Integer> responseFuture = p.executeRequest(request, new AsyncCompletionHandler<Integer>() { @Override public Integer onCompleted(Response response) { return response.getStatusCode(); } @Override public void onThrowable(Throwable t) { t.printStackTrace(); fail("Unexpected exception: " + t.getMessage(), t); } }); int statusCode = responseFuture.get(); assertEquals(statusCode, 200); } }
private void doTestNegative(final int status, boolean strict) throws Exception { ResponseFilter responseFilter = new ResponseFilter() { @Override public <T> FilterContext<T> filter(FilterContext<T> ctx) { // pass on the x-expect-get and remove the x-redirect // headers if found in the response ctx.getResponseHeaders().get("x-expect-post"); ctx.getRequest().getHeaders().add("x-expect-post", "true"); ctx.getRequest().getHeaders().remove("x-redirect"); return ctx; } }; try (AsyncHttpClient p = asyncHttpClient(config().setFollowRedirect(true).setStrict302Handling(strict).addResponseFilter(responseFilter))) { Request request = post(getTargetUrl()).addFormParam("q", "a b").addHeader("x-redirect", +status + "@" + "http://localhost:" + port1 + "/foo/bar/baz").addHeader("x-negative", "true").build(); Future<Integer> responseFuture = p.executeRequest(request, new AsyncCompletionHandler<Integer>() { @Override public Integer onCompleted(Response response) { return response.getStatusCode(); } @Override public void onThrowable(Throwable t) { t.printStackTrace(); fail("Unexpected exception: " + t.getMessage(), t); } }); int statusCode = responseFuture.get(); assertEquals(statusCode, 200); } }
break; case POST: request = post(url); if (body != null) { request.setBody(body.getBytes());
break; case POST: request = post(url); if (body != null) { request.setBody(body.getBytes());