public Builder addFormParam(String key, String value) { requestBuilder.addFormParam(key, value); return this; }
@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="); }
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); } }
public Builder addFormParam(String key, String value) { requestBuilder.addFormParam(key, value); return this; }
/** * Serialize form parameters to the request body. * * @param builder The pending HTTP request. * @see RequestBuilder#addFormParam(String, String) */ private void handleFormParameters(RequestBuilder builder) { for (HttpParameter p : formParams.values()) { builder.addFormParam(p.getName(), p.getValue()); } }
Request asAhcRequest(final HttpRequest request) { final RequestBuilder builder = new RequestBuilder() .setUrl(request.getUrl()) .setMethod(request.getHttpMethod().toString()); request.getHeaders().getHeadersAsMap().forEach((name, values) -> values.forEach(value -> builder.addHeader(name, value))); Optional.ofNullable(request.getBody()).ifPresent(body -> { if (body instanceof StringHttpRequestBody) { final String bodyAsString = ((StringHttpRequestBody) body).getString(); builder.setBody(bodyAsString); if (!request.getHeaders().findFlatHeader(HttpHeaders.CONTENT_TYPE).isPresent()) { builder.addHeader(HttpHeaders.CONTENT_TYPE, "application/json; charset=utf-8"); } } else if (body instanceof FileHttpRequestBody) { builder.setBody(((FileHttpRequestBody) body).getFile()); } else if (body instanceof FormUrlEncodedHttpRequestBody) { final FormUrlEncodedHttpRequestBody formUrlEncodedHttpRequestBody = (FormUrlEncodedHttpRequestBody) body; formUrlEncodedHttpRequestBody.getParameters().forEach(pair -> builder.addFormParam(pair.getName(), pair.getValue())); } }); return builder.build(); }
stringListMap.forEach((key, values) -> values.forEach(value -> builder.addFormParam(key, value))); } else { builder.setBody(stringBody);
Request asAhcRequest(final HttpRequest request) { final RequestBuilder builder = new RequestBuilder() .setUrl(request.getUrl()) .setMethod(request.getHttpMethod().toString()); request.getHeaders().getHeadersAsMap().forEach((name, values) -> values.forEach(value -> builder.addHeader(name, value))); Optional.ofNullable(request.getBody()).ifPresent(body -> { if (body instanceof StringHttpRequestBody) { final String bodyAsString = ((StringHttpRequestBody) body).getString(); builder.setBody(bodyAsString); if (!request.getHeaders().findFlatHeader(HttpHeaders.CONTENT_TYPE).isPresent()) { builder.addHeader(HttpHeaders.CONTENT_TYPE, "application/json; charset=utf-8"); } } else if (body instanceof FileHttpRequestBody) { builder.setBody(((FileHttpRequestBody) body).getFile()); } else if (body instanceof FormUrlEncodedHttpRequestBody) { final FormUrlEncodedHttpRequestBody formUrlEncodedHttpRequestBody = (FormUrlEncodedHttpRequestBody) body; formUrlEncodedHttpRequestBody.getParameters().forEach(pair -> builder.addFormParam(pair.getName(), pair.getValue())); } }); return builder.build(); }
Request asAhcRequest(final HttpRequest request) { final RequestBuilder builder = new RequestBuilder() .setUrl(request.getUrl()) .setMethod(request.getHttpMethod().toString()); request.getHeaders().getHeadersAsMap().forEach((name, values) -> values.forEach(value -> builder.addHeader(name, value))); Optional.ofNullable(request.getBody()).ifPresent(body -> { if (body instanceof StringHttpRequestBody) { final String bodyAsString = ((StringHttpRequestBody) body).getString(); builder.setBody(bodyAsString); if (!request.getHeaders().findFlatHeader(HttpHeaders.CONTENT_TYPE).isPresent()) { builder.addHeader(HttpHeaders.CONTENT_TYPE, "application/json; charset=utf-8"); } } else if (body instanceof FileHttpRequestBody) { builder.setBody(((FileHttpRequestBody) body).getFile()); } else if (body instanceof FormUrlEncodedHttpRequestBody) { final FormUrlEncodedHttpRequestBody formUrlEncodedHttpRequestBody = (FormUrlEncodedHttpRequestBody) body; formUrlEncodedHttpRequestBody.getParameters().forEach(pair -> builder.addFormParam(pair.getName(), pair.getValue())); } }); return builder.build(); }