/*
 * Copyright 2014 Red Hat, Inc.
 *
 * Red Hat licenses this file to you under the Apache License, version 2.0
 * (the "License"); you may not use this file except in compliance with the
 * License.  You may obtain a copy of the License at:
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
 * License for the specific language governing permissions and limitations
 * under the License.
 */

package io.vertx.reactivex.core.http;

import io.vertx.reactivex.RxHelper;
import io.vertx.reactivex.ObservableHelper;
import io.vertx.reactivex.FlowableHelper;
import io.vertx.reactivex.impl.AsyncResultMaybe;
import io.vertx.reactivex.impl.AsyncResultSingle;
import io.vertx.reactivex.impl.AsyncResultCompletable;
import io.vertx.reactivex.WriteStreamObserver;
import io.vertx.reactivex.WriteStreamSubscriber;
import java.util.Map;
import java.util.Set;
import java.util.List;
import java.util.Iterator;
import java.util.function.Function;
import java.util.stream.Collectors;
import io.vertx.core.Handler;
import io.vertx.core.AsyncResult;
import io.vertx.core.json.JsonObject;
import io.vertx.core.json.JsonArray;
import io.vertx.lang.rx.RxGen;
import io.vertx.lang.rx.TypeArg;
import io.vertx.lang.rx.MappingIterator;

Represents a client-side HTTP request.

Instances are created by an HttpClient instance, via one of the methods corresponding to the specific HTTP methods, or the generic request methods. On creation the request will not have been written to the wire.

Once a request has been obtained, headers can be set on it, and data can be written to its body if required. Once you are ready to send the request, one of the end methods should be called.

Nothing is actually sent until the request has been internally assigned an HTTP connection.

The HttpClient instance will return an instance of this class immediately, even if there are no HTTP connections available in the pool. Any requests sent before a connection is assigned will be queued internally and actually sent when an HTTP connection becomes available from the pool.

The headers of the request are queued for writing either when the end method is called, or, when the first part of the body is written, whichever occurs first.

This class supports both chunked and non-chunked HTTP.

It implements WriteStream so it can be used with Pipe to pipe data with flow control.

An example of using this class is as follows:

NOTE: This class has been automatically generated from the original non RX-ified interface using Vert.x codegen.
/** * Represents a client-side HTTP request. * <p> * Instances are created by an {@link io.vertx.reactivex.core.http.HttpClient} instance, via one of the methods corresponding to the * specific HTTP methods, or the generic request methods. On creation the request will not have been written to the * wire. * <p> * Once a request has been obtained, headers can be set on it, and data can be written to its body if required. Once * you are ready to send the request, one of the {@link io.vertx.reactivex.core.http.HttpClientRequest#end} methods should be called. * <p> * Nothing is actually sent until the request has been internally assigned an HTTP connection. * <p> * The {@link io.vertx.reactivex.core.http.HttpClient} instance will return an instance of this class immediately, even if there are no HTTP * connections available in the pool. Any requests sent before a connection is assigned will be queued * internally and actually sent when an HTTP connection becomes available from the pool. * <p> * The headers of the request are queued for writing either when the {@link io.vertx.reactivex.core.http.HttpClientRequest#end} method is called, or, when the first * part of the body is written, whichever occurs first. * <p> * This class supports both chunked and non-chunked HTTP. * <p> * It implements {@link io.vertx.reactivex.core.streams.WriteStream} so it can be used with * {@link io.vertx.reactivex.core.streams.Pipe} to pipe data with flow control. * <p> * An example of using this class is as follows: * <p> * * <p/> * NOTE: This class has been automatically generated from the {@link io.vertx.core.http.HttpClientRequest original} non RX-ified interface using Vert.x codegen. */
@RxGen(io.vertx.core.http.HttpClientRequest.class) public class HttpClientRequest implements io.vertx.reactivex.core.streams.WriteStream<io.vertx.reactivex.core.buffer.Buffer> { @Override public String toString() { return delegate.toString(); } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; HttpClientRequest that = (HttpClientRequest) o; return delegate.equals(that.delegate); } @Override public int hashCode() { return delegate.hashCode(); } public static final TypeArg<HttpClientRequest> __TYPE_ARG = new TypeArg<>( obj -> new HttpClientRequest((io.vertx.core.http.HttpClientRequest) obj), HttpClientRequest::getDelegate ); private final io.vertx.core.http.HttpClientRequest delegate; public HttpClientRequest(io.vertx.core.http.HttpClientRequest delegate) { this.delegate = delegate; } public HttpClientRequest(Object delegate) { this.delegate = (io.vertx.core.http.HttpClientRequest)delegate; } public io.vertx.core.http.HttpClientRequest getDelegate() { return delegate; } private WriteStreamObserver<io.vertx.reactivex.core.buffer.Buffer> observer; private WriteStreamSubscriber<io.vertx.reactivex.core.buffer.Buffer> subscriber; public synchronized WriteStreamObserver<io.vertx.reactivex.core.buffer.Buffer> toObserver() { if (observer == null) { Function<io.vertx.reactivex.core.buffer.Buffer, io.vertx.core.buffer.Buffer> conv = io.vertx.reactivex.core.buffer.Buffer::getDelegate; observer = RxHelper.toObserver(getDelegate(), conv); } return observer; } public synchronized WriteStreamSubscriber<io.vertx.reactivex.core.buffer.Buffer> toSubscriber() { if (subscriber == null) { Function<io.vertx.reactivex.core.buffer.Buffer, io.vertx.core.buffer.Buffer> conv = io.vertx.reactivex.core.buffer.Buffer::getDelegate; subscriber = RxHelper.toSubscriber(getDelegate(), conv); } return subscriber; }
Same as but with an handler called when the operation completes
Params:
  • data –
  • handler –
/** * Same as but with an <code>handler</code> called when the operation completes * @param data * @param handler */
public void write(io.vertx.reactivex.core.buffer.Buffer data, Handler<AsyncResult<Void>> handler) { delegate.write(data.getDelegate(), handler); }
Same as but with an handler called when the operation completes
Params:
  • data –
/** * Same as but with an <code>handler</code> called when the operation completes * @param data */
public void write(io.vertx.reactivex.core.buffer.Buffer data) { write(data, ar -> { }); }
Same as but with an handler called when the operation completes
Params:
  • data –
Returns:
/** * Same as but with an <code>handler</code> called when the operation completes * @param data * @return */
public io.reactivex.Completable rxWrite(io.vertx.reactivex.core.buffer.Buffer data) { return AsyncResultCompletable.toCompletable($handler -> { write(data, $handler); }); }
This will return true if there are more bytes in the write queue than the value set using setWriteQueueMaxSize
Returns:true if write queue is full
/** * This will return <code>true</code> if there are more bytes in the write queue than the value set using {@link io.vertx.reactivex.core.http.HttpClientRequest#setWriteQueueMaxSize} * @return <code>true</code> if write queue is full */
public boolean writeQueueFull() { boolean ret = delegate.writeQueueFull(); return ret; } public io.vertx.reactivex.core.http.HttpClientRequest exceptionHandler(Handler<java.lang.Throwable> handler) { delegate.exceptionHandler(handler); return this; } public io.vertx.reactivex.core.http.HttpClientRequest setWriteQueueMaxSize(int maxSize) { delegate.setWriteQueueMaxSize(maxSize); return this; } public io.vertx.reactivex.core.http.HttpClientRequest drainHandler(Handler<Void> handler) { delegate.drainHandler(handler); return this; }
Set the host value of the HTTP/1.1 host header or HTTP/2 authority pseudo header

The initial value is the same than the server socket address host.

Keep in mind that changing this value won't change the actual server socket address for this request.

Params:
  • host – the host part of the HTTP/1.1 host header or HTTP/2 authority pseudo header
Returns:a reference to this, so the API can be used fluently
/** * Set the host value of the HTTP/1.1 <code>host</code> header or HTTP/2 <code>authority</code> pseudo header * <p>The initial value is the same than the server socket address host. * <p>Keep in mind that changing this value won't change the actual server socket address for this request. * @param host the host part of the HTTP/1.1 <code>host</code> header or HTTP/2 <code>authority</code> pseudo header * @return a reference to this, so the API can be used fluently */
public io.vertx.reactivex.core.http.HttpClientRequest setHost(String host) { delegate.setHost(host); return this; }
Returns:the host value of the HTTP/1.1 host header or HTTP/2 authority pseudo header
/** * @return the host value of the HTTP/1.1 <code>host</code> header or HTTP/2 <code>authority</code> pseudo header */
public String getHost() { String ret = delegate.getHost(); return ret; }
Set the port value of the HTTP/1.1 host header or HTTP/2 authority pseudo header

Keep in mind that this won't change the actual server socket address for this request.

The initial value is the same than the server socket address port.

Params:
  • port – the port part of the HTTP/1.1 host header or HTTP/2 authority pseudo header
Returns:a reference to this, so the API can be used fluently
/** * Set the port value of the HTTP/1.1 <code>host</code> header or HTTP/2 <code>authority</code> pseudo header * * <p> Keep in mind that this won't change the actual server socket address for this request. * <p>The initial value is the same than the server socket address port. * @param port the port part of the HTTP/1.1 <code>host</code> header or HTTP/2 <code>authority</code> pseudo header * @return a reference to this, so the API can be used fluently */
public io.vertx.reactivex.core.http.HttpClientRequest setPort(int port) { delegate.setPort(port); return this; }
Returns:the port value of the HTTP/1.1 host header or HTTP/2 authority pseudo header
/** * @return the port value of the HTTP/1.1 <code>host</code> header or HTTP/2 <code>authority</code> pseudo header */
public int getPort() { int ret = delegate.getPort(); return ret; }
Set the request to follow HTTP redirects up to HttpClientOptions.
Params:
  • followRedirects – true to follow HTTP redirects
Returns:a reference to this, so the API can be used fluently
/** * Set the request to follow HTTP redirects up to {@link io.vertx.core.http.HttpClientOptions}. * @param followRedirects <code>true</code> to follow HTTP redirects * @return a reference to this, so the API can be used fluently */
public io.vertx.reactivex.core.http.HttpClientRequest setFollowRedirects(boolean followRedirects) { delegate.setFollowRedirects(followRedirects); return this; }
Set the max number of HTTP redirects this request will follow. The default is 0 which means no redirects.
Params:
  • maxRedirects – the number of HTTP redirect to follow
Returns:a reference to this, so the API can be used fluently
/** * Set the max number of HTTP redirects this request will follow. The default is <code>0</code> which means * no redirects. * @param maxRedirects the number of HTTP redirect to follow * @return a reference to this, so the API can be used fluently */
public io.vertx.reactivex.core.http.HttpClientRequest setMaxRedirects(int maxRedirects) { delegate.setMaxRedirects(maxRedirects); return this; }
If chunked is true then the request will be set into HTTP chunked mode
Params:
  • chunked – true if chunked encoding
Returns:a reference to this, so the API can be used fluently
/** * If chunked is true then the request will be set into HTTP chunked mode * @param chunked true if chunked encoding * @return a reference to this, so the API can be used fluently */
public io.vertx.reactivex.core.http.HttpClientRequest setChunked(boolean chunked) { delegate.setChunked(chunked); return this; }
Returns:Is the request chunked?
/** * @return Is the request chunked? */
public boolean isChunked() { boolean ret = delegate.isChunked(); return ret; }
The HTTP method for the request.
Returns:
/** * The HTTP method for the request. * @return */
public io.vertx.core.http.HttpMethod getMethod() { io.vertx.core.http.HttpMethod ret = delegate.getMethod(); return ret; }
Set the HTTP method for this request.
Params:
  • method – the HTTP method
Returns:a reference to this, so the API can be used fluently
/** * Set the HTTP method for this request. * @param method the HTTP method * @return a reference to this, so the API can be used fluently */
public io.vertx.reactivex.core.http.HttpClientRequest setMethod(io.vertx.core.http.HttpMethod method) { delegate.setMethod(method); return this; }
Returns:the absolute URI corresponding to the the HTTP request
/** * @return the absolute URI corresponding to the the HTTP request */
public String absoluteURI() { String ret = delegate.absoluteURI(); return ret; }
Returns:The URI of the request.
/** * @return The URI of the request. */
public String getURI() { String ret = delegate.getURI(); return ret; }
Set the request uri.
Params:
  • uri – the request uri
Returns:a reference to this, so the API can be used fluently
/** * Set the request uri. * @param uri the request uri * @return a reference to this, so the API can be used fluently */
public io.vertx.reactivex.core.http.HttpClientRequest setURI(String uri) { delegate.setURI(uri); return this; }
Returns:The path part of the uri. For example /somepath/somemorepath/someresource.foo
/** * @return The path part of the uri. For example /somepath/somemorepath/someresource.foo */
public String path() { String ret = delegate.path(); return ret; }
Returns:the query part of the uri. For example someparam=32&someotherparam=x
/** * @return the query part of the uri. For example someparam=32&amp;someotherparam=x */
public String query() { String ret = delegate.query(); return ret; }
Returns:The HTTP headers
/** * @return The HTTP headers */
public io.vertx.reactivex.core.MultiMap headers() { if (cached_0 != null) { return cached_0; } io.vertx.reactivex.core.MultiMap ret = io.vertx.reactivex.core.MultiMap.newInstance((io.vertx.core.MultiMap)delegate.headers()); cached_0 = ret; return ret; }
Put an HTTP header
Params:
  • name – The header name
  • value – The header value
Returns:a reference to this, so the API can be used fluently
/** * Put an HTTP header * @param name The header name * @param value The header value * @return a reference to this, so the API can be used fluently */
public io.vertx.reactivex.core.http.HttpClientRequest putHeader(String name, String value) { delegate.putHeader(name, value); return this; }
Returns:the HTTP version for this request
/** * @return the HTTP version for this request */
public io.vertx.core.http.HttpVersion version() { io.vertx.core.http.HttpVersion ret = delegate.version(); return ret; }
Same as write but with an handler called when the operation completes
Params:
  • chunk –
  • handler –
/** * Same as {@link io.vertx.reactivex.core.http.HttpClientRequest#write} but with an <code>handler</code> called when the operation completes * @param chunk * @param handler */
public void write(String chunk, Handler<AsyncResult<Void>> handler) { delegate.write(chunk, handler); }
Same as write but with an handler called when the operation completes
Params:
  • chunk –
/** * Same as {@link io.vertx.reactivex.core.http.HttpClientRequest#write} but with an <code>handler</code> called when the operation completes * @param chunk */
public void write(String chunk) { write(chunk, ar -> { }); }
Same as write but with an handler called when the operation completes
Params:
  • chunk –
Returns:
/** * Same as {@link io.vertx.reactivex.core.http.HttpClientRequest#write} but with an <code>handler</code> called when the operation completes * @param chunk * @return */
public io.reactivex.Completable rxWrite(String chunk) { return AsyncResultCompletable.toCompletable($handler -> { write(chunk, $handler); }); }
Same as write but with an handler called when the operation completes
Params:
  • chunk –
  • enc –
  • handler –
/** * Same as {@link io.vertx.reactivex.core.http.HttpClientRequest#write} but with an <code>handler</code> called when the operation completes * @param chunk * @param enc * @param handler */
public void write(String chunk, String enc, Handler<AsyncResult<Void>> handler) { delegate.write(chunk, enc, handler); }
Same as write but with an handler called when the operation completes
Params:
  • chunk –
  • enc –
/** * Same as {@link io.vertx.reactivex.core.http.HttpClientRequest#write} but with an <code>handler</code> called when the operation completes * @param chunk * @param enc */
public void write(String chunk, String enc) { write(chunk, enc, ar -> { }); }
Same as write but with an handler called when the operation completes
Params:
  • chunk –
  • enc –
Returns:
/** * Same as {@link io.vertx.reactivex.core.http.HttpClientRequest#write} but with an <code>handler</code> called when the operation completes * @param chunk * @param enc * @return */
public io.reactivex.Completable rxWrite(String chunk, String enc) { return AsyncResultCompletable.toCompletable($handler -> { write(chunk, enc, $handler); }); }
If you send an HTTP request with the header Expect set to the value 100-continue and the server responds with an interim HTTP response with a status code of 100 and a continue handler has been set using this method, then the handler will be called.

You can then continue to write data to the request body and later end it. This is normally used in conjunction with the sendHead method to force the request header to be written before the request has ended.

Params:
  • handler –
Returns:a reference to this, so the API can be used fluently
/** * If you send an HTTP request with the header <code>Expect</code> set to the value <code>100-continue</code> * and the server responds with an interim HTTP response with a status code of <code>100</code> and a continue handler * has been set using this method, then the <code>handler</code> will be called. * <p> * You can then continue to write data to the request body and later end it. This is normally used in conjunction with * the {@link io.vertx.reactivex.core.http.HttpClientRequest#sendHead} method to force the request header to be written before the request has ended. * @param handler * @return a reference to this, so the API can be used fluently */
public io.vertx.reactivex.core.http.HttpClientRequest continueHandler(Handler<Void> handler) { delegate.continueHandler(handler); return this; }
Like sendHead but with an handler after headers have been sent. The handler will be called with the HttpVersion if it can be determined or null otherwise.

Params:
  • completionHandler –
Returns:
/** * Like {@link io.vertx.reactivex.core.http.HttpClientRequest#sendHead} but with an handler after headers have been sent. The handler will be called with * the {@link io.vertx.core.http.HttpVersion} if it can be determined or null otherwise.<p> * @param completionHandler * @return */
public io.vertx.reactivex.core.http.HttpClientRequest sendHead(Handler<AsyncResult<Void>> completionHandler) { delegate.sendHead(completionHandler); return this; }
Like sendHead but with an handler after headers have been sent. The handler will be called with the HttpVersion if it can be determined or null otherwise.

Returns:
/** * Like {@link io.vertx.reactivex.core.http.HttpClientRequest#sendHead} but with an handler after headers have been sent. The handler will be called with * the {@link io.vertx.core.http.HttpVersion} if it can be determined or null otherwise.<p> * @return */
public io.vertx.reactivex.core.http.HttpClientRequest sendHead() { return sendHead(ar -> { }); }
Like sendHead but with an handler after headers have been sent. The handler will be called with the HttpVersion if it can be determined or null otherwise.

Returns:
/** * Like {@link io.vertx.reactivex.core.http.HttpClientRequest#sendHead} but with an handler after headers have been sent. The handler will be called with * the {@link io.vertx.core.http.HttpVersion} if it can be determined or null otherwise.<p> * @return */
public io.reactivex.Completable rxSendHead() { return AsyncResultCompletable.toCompletable($handler -> { sendHead($handler); }); }
Create an HTTP tunnel to the server.

Send an HTTP request to the server, then configures the transport to exchange raw buffers when the server replies with an appropriate response:

  • 200 for HTTP CONNECT method
  • 101 for HTTP/1.1 GET with Upgrade connection header

The handler is called after response headers are received.

Use HttpClientResponse.netSocket to get a for the interacting more conveniently with the server.

HTTP/1.1 pipe-lined requests are not supported.

Params:
  • handler – the response completion handler
/** * Create an HTTP tunnel to the server. * * <p> Send an HTTP request to the server, then configures the transport to exchange * raw buffers when the server replies with an appropriate response: * * <ul> * <li><code>200</code> for HTTP <code>CONNECT</code> method</li> * <li><code>101</code> for HTTP/1.1 <code>GET</code> with <code>Upgrade</code> <code>connection</code> header</li> * </ul> * * <p> The <code>handler</code> is called after response headers are received. * * <p> Use {@link io.vertx.reactivex.core.http.HttpClientResponse#netSocket} to get a for the interacting * more conveniently with the server. * * <p> HTTP/1.1 pipe-lined requests are not supported. * @param handler the response completion handler */
public void connect(Handler<AsyncResult<io.vertx.reactivex.core.http.HttpClientResponse>> handler) { delegate.connect(new Handler<AsyncResult<io.vertx.core.http.HttpClientResponse>>() { public void handle(AsyncResult<io.vertx.core.http.HttpClientResponse> ar) { if (ar.succeeded()) { handler.handle(io.vertx.core.Future.succeededFuture(io.vertx.reactivex.core.http.HttpClientResponse.newInstance((io.vertx.core.http.HttpClientResponse)ar.result()))); } else { handler.handle(io.vertx.core.Future.failedFuture(ar.cause())); } } }); }
Create an HTTP tunnel to the server.

Send an HTTP request to the server, then configures the transport to exchange raw buffers when the server replies with an appropriate response:

  • 200 for HTTP CONNECT method
  • 101 for HTTP/1.1 GET with Upgrade connection header

The handler is called after response headers are received.

Use HttpClientResponse.netSocket to get a for the interacting more conveniently with the server.

HTTP/1.1 pipe-lined requests are not supported.

/** * Create an HTTP tunnel to the server. * * <p> Send an HTTP request to the server, then configures the transport to exchange * raw buffers when the server replies with an appropriate response: * * <ul> * <li><code>200</code> for HTTP <code>CONNECT</code> method</li> * <li><code>101</code> for HTTP/1.1 <code>GET</code> with <code>Upgrade</code> <code>connection</code> header</li> * </ul> * * <p> The <code>handler</code> is called after response headers are received. * * <p> Use {@link io.vertx.reactivex.core.http.HttpClientResponse#netSocket} to get a for the interacting * more conveniently with the server. * * <p> HTTP/1.1 pipe-lined requests are not supported. */
public void connect() { connect(ar -> { }); }
Create an HTTP tunnel to the server.

Send an HTTP request to the server, then configures the transport to exchange raw buffers when the server replies with an appropriate response:

  • 200 for HTTP CONNECT method
  • 101 for HTTP/1.1 GET with Upgrade connection header

The handler is called after response headers are received.

Use HttpClientResponse.netSocket to get a for the interacting more conveniently with the server.

HTTP/1.1 pipe-lined requests are not supported.

Returns:
/** * Create an HTTP tunnel to the server. * * <p> Send an HTTP request to the server, then configures the transport to exchange * raw buffers when the server replies with an appropriate response: * * <ul> * <li><code>200</code> for HTTP <code>CONNECT</code> method</li> * <li><code>101</code> for HTTP/1.1 <code>GET</code> with <code>Upgrade</code> <code>connection</code> header</li> * </ul> * * <p> The <code>handler</code> is called after response headers are received. * * <p> Use {@link io.vertx.reactivex.core.http.HttpClientResponse#netSocket} to get a for the interacting * more conveniently with the server. * * <p> HTTP/1.1 pipe-lined requests are not supported. * @return */
public io.reactivex.Single<io.vertx.reactivex.core.http.HttpClientResponse> rxConnect() { return AsyncResultSingle.toSingle($handler -> { connect($handler); }); }
Set a callback for the associated HttpClientResponse.

This method does not modify the current request being sent.

Params:
  • handler – the completion handler
Returns:a reference to this, so the API can be used fluently
/** * Set a callback for the associated {@link io.vertx.reactivex.core.http.HttpClientResponse}. * * <p> This method does not modify the current request being sent. * @param handler the completion handler * @return a reference to this, so the API can be used fluently */
public io.vertx.reactivex.core.http.HttpClientRequest response(Handler<AsyncResult<io.vertx.reactivex.core.http.HttpClientResponse>> handler) { delegate.response(new Handler<AsyncResult<io.vertx.core.http.HttpClientResponse>>() { public void handle(AsyncResult<io.vertx.core.http.HttpClientResponse> ar) { if (ar.succeeded()) { handler.handle(io.vertx.core.Future.succeededFuture(io.vertx.reactivex.core.http.HttpClientResponse.newInstance((io.vertx.core.http.HttpClientResponse)ar.result()))); } else { handler.handle(io.vertx.core.Future.failedFuture(ar.cause())); } } }); return this; }
Set a callback for the associated HttpClientResponse.

This method does not modify the current request being sent.

Returns:a reference to this, so the API can be used fluently
/** * Set a callback for the associated {@link io.vertx.reactivex.core.http.HttpClientResponse}. * * <p> This method does not modify the current request being sent. * @return a reference to this, so the API can be used fluently */
public io.vertx.reactivex.core.http.HttpClientRequest response() { return response(ar -> { }); }
Set a callback for the associated HttpClientResponse.

This method does not modify the current request being sent.

Returns:a reference to this, so the API can be used fluently
/** * Set a callback for the associated {@link io.vertx.reactivex.core.http.HttpClientResponse}. * * <p> This method does not modify the current request being sent. * @return a reference to this, so the API can be used fluently */
public io.reactivex.Single<io.vertx.reactivex.core.http.HttpClientResponse> rxResponse() { return AsyncResultSingle.toSingle($handler -> { response($handler); }); }
Send the request with an empty body.
Params:
/** * Send the request with an empty body. * @param handler the completion handler for the {@link io.vertx.reactivex.core.http.HttpClientResponse} */
public void send(Handler<AsyncResult<io.vertx.reactivex.core.http.HttpClientResponse>> handler) { delegate.send(new Handler<AsyncResult<io.vertx.core.http.HttpClientResponse>>() { public void handle(AsyncResult<io.vertx.core.http.HttpClientResponse> ar) { if (ar.succeeded()) { handler.handle(io.vertx.core.Future.succeededFuture(io.vertx.reactivex.core.http.HttpClientResponse.newInstance((io.vertx.core.http.HttpClientResponse)ar.result()))); } else { handler.handle(io.vertx.core.Future.failedFuture(ar.cause())); } } }); }
Send the request with an empty body.
/** * Send the request with an empty body. */
public void send() { send(ar -> { }); }
Send the request with an empty body.
Returns:
/** * Send the request with an empty body. * @return */
public io.reactivex.Single<io.vertx.reactivex.core.http.HttpClientResponse> rxSend() { return AsyncResultSingle.toSingle($handler -> { send($handler); }); }
Send the request with a string body.
Params:
/** * Send the request with a string <code>body</code>. * @param body * @param handler the completion handler for the {@link io.vertx.reactivex.core.http.HttpClientResponse} */
public void send(String body, Handler<AsyncResult<io.vertx.reactivex.core.http.HttpClientResponse>> handler) { delegate.send(body, new Handler<AsyncResult<io.vertx.core.http.HttpClientResponse>>() { public void handle(AsyncResult<io.vertx.core.http.HttpClientResponse> ar) { if (ar.succeeded()) { handler.handle(io.vertx.core.Future.succeededFuture(io.vertx.reactivex.core.http.HttpClientResponse.newInstance((io.vertx.core.http.HttpClientResponse)ar.result()))); } else { handler.handle(io.vertx.core.Future.failedFuture(ar.cause())); } } }); }
Send the request with a string body.
Params:
  • body –
/** * Send the request with a string <code>body</code>. * @param body */
public void send(String body) { send(body, ar -> { }); }
Send the request with a string body.
Params:
  • body –
Returns:
/** * Send the request with a string <code>body</code>. * @param body * @return */
public io.reactivex.Single<io.vertx.reactivex.core.http.HttpClientResponse> rxSend(String body) { return AsyncResultSingle.toSingle($handler -> { send(body, $handler); }); }
Send the request with a buffer body.
Params:
/** * Send the request with a buffer <code>body</code>. * @param body * @param handler the completion handler for the {@link io.vertx.reactivex.core.http.HttpClientResponse} */
public void send(io.vertx.reactivex.core.buffer.Buffer body, Handler<AsyncResult<io.vertx.reactivex.core.http.HttpClientResponse>> handler) { delegate.send(body.getDelegate(), new Handler<AsyncResult<io.vertx.core.http.HttpClientResponse>>() { public void handle(AsyncResult<io.vertx.core.http.HttpClientResponse> ar) { if (ar.succeeded()) { handler.handle(io.vertx.core.Future.succeededFuture(io.vertx.reactivex.core.http.HttpClientResponse.newInstance((io.vertx.core.http.HttpClientResponse)ar.result()))); } else { handler.handle(io.vertx.core.Future.failedFuture(ar.cause())); } } }); }
Send the request with a buffer body.
Params:
  • body –
/** * Send the request with a buffer <code>body</code>. * @param body */
public void send(io.vertx.reactivex.core.buffer.Buffer body) { send(body, ar -> { }); }
Send the request with a buffer body.
Params:
  • body –
Returns:
/** * Send the request with a buffer <code>body</code>. * @param body * @return */
public io.reactivex.Single<io.vertx.reactivex.core.http.HttpClientResponse> rxSend(io.vertx.reactivex.core.buffer.Buffer body) { return AsyncResultSingle.toSingle($handler -> { send(body, $handler); }); }
Send the request with a stream body.

If the HttpHeaders is set then the request assumes this is the length of the {stream}, otherwise the request will set a chunked HttpHeaders.

Params:
/** * Send the request with a stream <code>body</code>. * * <p> If the {@link io.vertx.reactivex.core.http.HttpHeaders} is set then the request assumes this is the * length of the {stream}, otherwise the request will set a chunked {@link io.vertx.reactivex.core.http.HttpHeaders}. * @param body * @param handler the completion handler for the {@link io.vertx.reactivex.core.http.HttpClientResponse} */
public void send(io.vertx.reactivex.core.streams.ReadStream<io.vertx.reactivex.core.buffer.Buffer> body, Handler<AsyncResult<io.vertx.reactivex.core.http.HttpClientResponse>> handler) { delegate.send(body.getDelegate(), new Handler<AsyncResult<io.vertx.core.http.HttpClientResponse>>() { public void handle(AsyncResult<io.vertx.core.http.HttpClientResponse> ar) { if (ar.succeeded()) { handler.handle(io.vertx.core.Future.succeededFuture(io.vertx.reactivex.core.http.HttpClientResponse.newInstance((io.vertx.core.http.HttpClientResponse)ar.result()))); } else { handler.handle(io.vertx.core.Future.failedFuture(ar.cause())); } } }); }
Send the request with a stream body.

If the HttpHeaders is set then the request assumes this is the length of the {stream}, otherwise the request will set a chunked HttpHeaders.

Params:
  • body –
/** * Send the request with a stream <code>body</code>. * * <p> If the {@link io.vertx.reactivex.core.http.HttpHeaders} is set then the request assumes this is the * length of the {stream}, otherwise the request will set a chunked {@link io.vertx.reactivex.core.http.HttpHeaders}. * @param body */
public void send(io.vertx.reactivex.core.streams.ReadStream<io.vertx.reactivex.core.buffer.Buffer> body) { send(body, ar -> { }); }
Send the request with a stream body.

If the HttpHeaders is set then the request assumes this is the length of the {stream}, otherwise the request will set a chunked HttpHeaders.

Params:
  • body –
Returns:
/** * Send the request with a stream <code>body</code>. * * <p> If the {@link io.vertx.reactivex.core.http.HttpHeaders} is set then the request assumes this is the * length of the {stream}, otherwise the request will set a chunked {@link io.vertx.reactivex.core.http.HttpHeaders}. * @param body * @return */
public io.reactivex.Single<io.vertx.reactivex.core.http.HttpClientResponse> rxSend(io.vertx.reactivex.core.streams.ReadStream<io.vertx.reactivex.core.buffer.Buffer> body) { return AsyncResultSingle.toSingle($handler -> { send(body, $handler); }); }
Send the request with a stream body.

If the HttpHeaders is set then the request assumes this is the length of the {stream}, otherwise the request will set a chunked HttpHeaders.

Params:
/** * Send the request with a stream <code>body</code>. * * <p> If the {@link io.vertx.reactivex.core.http.HttpHeaders} is set then the request assumes this is the * length of the {stream}, otherwise the request will set a chunked {@link io.vertx.reactivex.core.http.HttpHeaders}. * @param body * @param handler the completion handler for the {@link io.vertx.reactivex.core.http.HttpClientResponse} */
public void send(io.reactivex.Flowable<io.vertx.reactivex.core.buffer.Buffer> body, Handler<AsyncResult<io.vertx.reactivex.core.http.HttpClientResponse>> handler) { delegate.send(io.vertx.reactivex.impl.ReadStreamSubscriber.asReadStream(body, obj -> obj.getDelegate()).resume(), new Handler<AsyncResult<io.vertx.core.http.HttpClientResponse>>() { public void handle(AsyncResult<io.vertx.core.http.HttpClientResponse> ar) { if (ar.succeeded()) { handler.handle(io.vertx.core.Future.succeededFuture(io.vertx.reactivex.core.http.HttpClientResponse.newInstance((io.vertx.core.http.HttpClientResponse)ar.result()))); } else { handler.handle(io.vertx.core.Future.failedFuture(ar.cause())); } } }); }
Send the request with a stream body.

If the HttpHeaders is set then the request assumes this is the length of the {stream}, otherwise the request will set a chunked HttpHeaders.

Params:
  • body –
/** * Send the request with a stream <code>body</code>. * * <p> If the {@link io.vertx.reactivex.core.http.HttpHeaders} is set then the request assumes this is the * length of the {stream}, otherwise the request will set a chunked {@link io.vertx.reactivex.core.http.HttpHeaders}. * @param body */
public void send(io.reactivex.Flowable<io.vertx.reactivex.core.buffer.Buffer> body) { send(body, ar -> { }); }
Send the request with a stream body.

If the HttpHeaders is set then the request assumes this is the length of the {stream}, otherwise the request will set a chunked HttpHeaders.

Params:
  • body –
Returns:
/** * Send the request with a stream <code>body</code>. * * <p> If the {@link io.vertx.reactivex.core.http.HttpHeaders} is set then the request assumes this is the * length of the {stream}, otherwise the request will set a chunked {@link io.vertx.reactivex.core.http.HttpHeaders}. * @param body * @return */
public io.reactivex.Single<io.vertx.reactivex.core.http.HttpClientResponse> rxSend(io.reactivex.Flowable<io.vertx.reactivex.core.buffer.Buffer> body) { return AsyncResultSingle.toSingle($handler -> { send(body, $handler); }); }
Same as end but with an handler called when the operation completes
Params:
  • chunk –
  • handler –
/** * Same as {@link io.vertx.reactivex.core.http.HttpClientRequest#end} but with an <code>handler</code> called when the operation completes * @param chunk * @param handler */
public void end(String chunk, Handler<AsyncResult<Void>> handler) { delegate.end(chunk, handler); }
Same as end but with an handler called when the operation completes
Params:
  • chunk –
/** * Same as {@link io.vertx.reactivex.core.http.HttpClientRequest#end} but with an <code>handler</code> called when the operation completes * @param chunk */
public void end(String chunk) { end(chunk, ar -> { }); }
Same as end but with an handler called when the operation completes
Params:
  • chunk –
Returns:
/** * Same as {@link io.vertx.reactivex.core.http.HttpClientRequest#end} but with an <code>handler</code> called when the operation completes * @param chunk * @return */
public io.reactivex.Completable rxEnd(String chunk) { return AsyncResultCompletable.toCompletable($handler -> { end(chunk, $handler); }); }
Same as end but with an handler called when the operation completes
Params:
  • chunk –
  • enc –
  • handler –
/** * Same as {@link io.vertx.reactivex.core.http.HttpClientRequest#end} but with an <code>handler</code> called when the operation completes * @param chunk * @param enc * @param handler */
public void end(String chunk, String enc, Handler<AsyncResult<Void>> handler) { delegate.end(chunk, enc, handler); }
Same as end but with an handler called when the operation completes
Params:
  • chunk –
  • enc –
/** * Same as {@link io.vertx.reactivex.core.http.HttpClientRequest#end} but with an <code>handler</code> called when the operation completes * @param chunk * @param enc */
public void end(String chunk, String enc) { end(chunk, enc, ar -> { }); }
Same as end but with an handler called when the operation completes
Params:
  • chunk –
  • enc –
Returns:
/** * Same as {@link io.vertx.reactivex.core.http.HttpClientRequest#end} but with an <code>handler</code> called when the operation completes * @param chunk * @param enc * @return */
public io.reactivex.Completable rxEnd(String chunk, String enc) { return AsyncResultCompletable.toCompletable($handler -> { end(chunk, enc, $handler); }); }
Same as end but with an handler called when the operation completes
Params:
  • chunk –
  • handler –
/** * Same as {@link io.vertx.reactivex.core.http.HttpClientRequest#end} but with an <code>handler</code> called when the operation completes * @param chunk * @param handler */
public void end(io.vertx.reactivex.core.buffer.Buffer chunk, Handler<AsyncResult<Void>> handler) { delegate.end(chunk.getDelegate(), handler); }
Same as end but with an handler called when the operation completes
Params:
  • chunk –
/** * Same as {@link io.vertx.reactivex.core.http.HttpClientRequest#end} but with an <code>handler</code> called when the operation completes * @param chunk */
public void end(io.vertx.reactivex.core.buffer.Buffer chunk) { end(chunk, ar -> { }); }
Same as end but with an handler called when the operation completes
Params:
  • chunk –
Returns:
/** * Same as {@link io.vertx.reactivex.core.http.HttpClientRequest#end} but with an <code>handler</code> called when the operation completes * @param chunk * @return */
public io.reactivex.Completable rxEnd(io.vertx.reactivex.core.buffer.Buffer chunk) { return AsyncResultCompletable.toCompletable($handler -> { end(chunk, $handler); }); }
Same as end but with an handler called when the operation completes
Params:
  • handler –
/** * Same as {@link io.vertx.reactivex.core.http.HttpClientRequest#end} but with an <code>handler</code> called when the operation completes * @param handler */
public void end(Handler<AsyncResult<Void>> handler) { delegate.end(handler); }
Same as end but with an handler called when the operation completes
/** * Same as {@link io.vertx.reactivex.core.http.HttpClientRequest#end} but with an <code>handler</code> called when the operation completes */
public void end() { end(ar -> { }); }
Same as end but with an handler called when the operation completes
Returns:
/** * Same as {@link io.vertx.reactivex.core.http.HttpClientRequest#end} but with an <code>handler</code> called when the operation completes * @return */
public io.reactivex.Completable rxEnd() { return AsyncResultCompletable.toCompletable($handler -> { end($handler); }); }
Set's the amount of time after which if the request does not return any data within the timeout period an TimeoutException will be passed to the exception handler (if provided) and the request will be closed.

Calling this method more than once has the effect of canceling any existing timeout and starting the timeout from scratch.

Params:
  • timeoutMs – The quantity of time in milliseconds.
Returns:a reference to this, so the API can be used fluently
/** * Set's the amount of time after which if the request does not return any data within the timeout period an * {@link java.util.concurrent.TimeoutException} will be passed to the exception handler (if provided) and * the request will be closed. * <p> * Calling this method more than once has the effect of canceling any existing timeout and starting * the timeout from scratch. * @param timeoutMs The quantity of time in milliseconds. * @return a reference to this, so the API can be used fluently */
public io.vertx.reactivex.core.http.HttpClientRequest setTimeout(long timeoutMs) { delegate.setTimeout(timeoutMs); return this; }
Set a push handler for this request.

The handler is called when the client receives a push promise from the server. The handler can be called multiple times, for each push promise.

The handler is called with a read-only HttpClientRequest, the following methods can be called:

In addition the handler should call the response method to set an handler to process the response.

Params:
  • handler – the handler
Returns:a reference to this, so the API can be used fluently
/** * Set a push handler for this request.<p/> * * The handler is called when the client receives a <i>push promise</i> from the server. The handler can be called * multiple times, for each push promise.<p/> * * The handler is called with a <i>read-only</i> {@link io.vertx.reactivex.core.http.HttpClientRequest}, the following methods can be called:<p/> * * <ul> * <li>{@link io.vertx.reactivex.core.http.HttpClientRequest#getMethod}</li> * <li>{@link io.vertx.reactivex.core.http.HttpClientRequest#getURI}</li> * <li>{@link io.vertx.reactivex.core.http.HttpClientRequest#headers}</li> * </ul> * * In addition the handler should call the {@link io.vertx.reactivex.core.http.HttpClientRequest#response} method to set an handler to * process the response.<p/> * @param handler the handler * @return a reference to this, so the API can be used fluently */
public io.vertx.reactivex.core.http.HttpClientRequest pushHandler(Handler<io.vertx.reactivex.core.http.HttpClientRequest> handler) { delegate.pushHandler(new Handler<io.vertx.core.http.HttpClientRequest>() { public void handle(io.vertx.core.http.HttpClientRequest event) { handler.handle(io.vertx.reactivex.core.http.HttpClientRequest.newInstance((io.vertx.core.http.HttpClientRequest)event)); } }); return this; }
Reset this stream with the error code 0.
Returns:
/** * Reset this stream with the error code <code>0</code>. * @return */
public boolean reset() { boolean ret = delegate.reset(); return ret; }
Reset this request:

  • for HTTP/2, this performs send an HTTP/2 reset frame with the specified error code
  • for HTTP/1.x, this closes the connection when the current request is inflight

When the request has not yet been sent, the request will be aborted and false is returned as indicator.

Params:
  • code – the error code
Returns:true when reset has been performed
/** * Reset this request: * <p/> * <ul> * <li>for HTTP/2, this performs send an HTTP/2 reset frame with the specified error <code>code</code></li> * <li>for HTTP/1.x, this closes the connection when the current request is inflight</li> * </ul> * <p/> * When the request has not yet been sent, the request will be aborted and false is returned as indicator. * <p/> * @param code the error code * @return <code>true</code> when reset has been performed */
public boolean reset(long code) { boolean ret = delegate.reset(code); return ret; }
Reset this request:

  • for HTTP/2, send an HTTP/2 reset frame with the specified error code
  • for HTTP/1.x, close the connection when the current request is inflight

When the request has not yet been sent, the request will be aborted and false is returned as indicator.

Params:
  • code – the error code
  • cause – an optional cause that can be attached to the error code
Returns:true when reset has been performed
/** * Reset this request: * <p/> * <ul> * <li>for HTTP/2, send an HTTP/2 reset frame with the specified error <code>code</code></li> * <li>for HTTP/1.x, close the connection when the current request is inflight</li> * </ul> * <p/> * When the request has not yet been sent, the request will be aborted and <code>false</code> is returned as indicator. * <p/> * @param code the error code * @param cause an optional cause that can be attached to the error code * @return true when reset has been performed */
public boolean reset(long code, java.lang.Throwable cause) { boolean ret = delegate.reset(code, cause); return ret; }
Returns:the HttpConnection associated with this request
/** * @return the {@link io.vertx.reactivex.core.http.HttpConnection} associated with this request */
public io.vertx.reactivex.core.http.HttpConnection connection() { if (cached_1 != null) { return cached_1; } io.vertx.reactivex.core.http.HttpConnection ret = io.vertx.reactivex.core.http.HttpConnection.newInstance((io.vertx.core.http.HttpConnection)delegate.connection()); cached_1 = ret; return ret; }
Write an HTTP/2 frame to the request, allowing to extend the HTTP/2 protocol.

The frame is sent immediatly and is not subject to flow control.

This method must be called after the request headers have been sent and only for the protocol HTTP/2. The sendHead should be used for this purpose.

Params:
  • type – the 8-bit frame type
  • flags – the 8-bit frame flags
  • payload – the frame payload
Returns:a reference to this, so the API can be used fluently
/** * Write an HTTP/2 frame to the request, allowing to extend the HTTP/2 protocol.<p> * * The frame is sent immediatly and is not subject to flow control.<p> * * This method must be called after the request headers have been sent and only for the protocol HTTP/2. * The {@link io.vertx.reactivex.core.http.HttpClientRequest#sendHead} should be used for this purpose. * @param type the 8-bit frame type * @param flags the 8-bit frame flags * @param payload the frame payload * @return a reference to this, so the API can be used fluently */
public io.vertx.reactivex.core.http.HttpClientRequest writeCustomFrame(int type, int flags, io.vertx.reactivex.core.buffer.Buffer payload) { delegate.writeCustomFrame(type, flags, payload.getDelegate()); return this; }
Returns:the id of the stream of this response, when it is not yet determined, i.e the request has not been yet sent or it is not supported HTTP/1.x
/** * @return the id of the stream of this response, when it is not yet determined, i.e the request has not been yet sent or it is not supported HTTP/1.x */
public int streamId() { int ret = delegate.streamId(); return ret; }
Like writeCustomFrame but with an HttpFrame.
Params:
  • frame – the frame to write
Returns:
/** * Like {@link io.vertx.reactivex.core.http.HttpClientRequest#writeCustomFrame} but with an {@link io.vertx.reactivex.core.http.HttpFrame}. * @param frame the frame to write * @return */
public io.vertx.reactivex.core.http.HttpClientRequest writeCustomFrame(io.vertx.reactivex.core.http.HttpFrame frame) { delegate.writeCustomFrame(frame.getDelegate()); return this; }
Sets the priority of the associated stream.

This is not implemented for HTTP/1.x.
Params:
  • streamPriority – the priority of this request's stream
Returns:
/** * Sets the priority of the associated stream. * <p/> * This is not implemented for HTTP/1.x. * @param streamPriority the priority of this request's stream * @return */
public io.vertx.reactivex.core.http.HttpClientRequest setStreamPriority(io.vertx.core.http.StreamPriority streamPriority) { delegate.setStreamPriority(streamPriority); return this; }
Returns:the priority of the associated HTTP/2 stream for HTTP/2 otherwise null
/** * @return the priority of the associated HTTP/2 stream for HTTP/2 otherwise <code>null</code> */
public io.vertx.core.http.StreamPriority getStreamPriority() { io.vertx.core.http.StreamPriority ret = delegate.getStreamPriority(); return ret; }
Like putHeader but using CharSequence
Params:
  • name –
  • value –
Returns:
/** * Like {@link io.vertx.reactivex.core.http.HttpClientRequest#putHeader} but using CharSequence * @param name * @param value * @return */
public io.vertx.reactivex.core.http.HttpClientRequest putHeader(java.lang.CharSequence name, java.lang.CharSequence value) { delegate.putHeader(name, value); return this; }
Put an HTTP header with multiple values
Params:
  • name – The header name
  • values – The header values
Returns:@return a reference to this, so the API can be used fluently
/** * Put an HTTP header with multiple values * @param name The header name * @param values The header values * @return @return a reference to this, so the API can be used fluently */
public io.vertx.reactivex.core.http.HttpClientRequest putHeader(String name, java.lang.Iterable<String> values) { delegate.putHeader(name, values); return this; }
Like putHeader but using CharSequence
Params:
  • name –
  • values –
Returns:
/** * Like {@link io.vertx.reactivex.core.http.HttpClientRequest#putHeader} but using CharSequence * @param name * @param values * @return */
public io.vertx.reactivex.core.http.HttpClientRequest putHeader(java.lang.CharSequence name, java.lang.Iterable<java.lang.CharSequence> values) { delegate.putHeader(name, values); return this; } private io.vertx.reactivex.core.MultiMap cached_0; private io.vertx.reactivex.core.http.HttpConnection cached_1; public static HttpClientRequest newInstance(io.vertx.core.http.HttpClientRequest arg) { return arg != null ? new HttpClientRequest(arg) : null; } }