Class HttpRequestExecutor
- java.lang.Object
-
- org.apache.http.protocol.HttpRequestExecutor
-
@Contract(threading=IMMUTABLE) public class HttpRequestExecutor extends java.lang.Object
HttpRequestExecutor
is a client side HTTP protocol handler based on the blocking (classic) I/O model.HttpRequestExecutor
relies onHttpProcessor
to generate mandatory protocol headers for all outgoing messages and apply common, cross-cutting message transformations to all incoming and outgoing messages. Application specific processing can be implemented outsideHttpRequestExecutor
once the request has been executed and a response has been received.- Since:
- 4.0
-
-
Field Summary
Fields Modifier and Type Field Description static int
DEFAULT_WAIT_FOR_CONTINUE
private int
waitForContinue
-
Constructor Summary
Constructors Constructor Description HttpRequestExecutor()
HttpRequestExecutor(int waitForContinue)
Creates new instance of HttpRequestExecutor.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected boolean
canResponseHaveBody(HttpRequest request, HttpResponse response)
Decide whether a response comes with an entity.private static void
closeConnection(HttpClientConnection conn)
protected HttpResponse
doReceiveResponse(HttpRequest request, HttpClientConnection conn, HttpContext context)
Waits for and receives a response.protected HttpResponse
doSendRequest(HttpRequest request, HttpClientConnection conn, HttpContext context)
Send the given request over the given connection.HttpResponse
execute(HttpRequest request, HttpClientConnection conn, HttpContext context)
Sends the request and obtain a response.void
postProcess(HttpResponse response, HttpProcessor processor, HttpContext context)
Post-processes the given response using the given protocol processor and completes the process of request execution.void
preProcess(HttpRequest request, HttpProcessor processor, HttpContext context)
Pre-process the given request using the given protocol processor and initiates the process of request execution.
-
-
-
Field Detail
-
DEFAULT_WAIT_FOR_CONTINUE
public static final int DEFAULT_WAIT_FOR_CONTINUE
- See Also:
- Constant Field Values
-
waitForContinue
private final int waitForContinue
-
-
Method Detail
-
canResponseHaveBody
protected boolean canResponseHaveBody(HttpRequest request, HttpResponse response)
Decide whether a response comes with an entity. The implementation in this class is based on RFC 2616.Derived executors can override this method to handle methods and response codes not specified in RFC 2616.
- Parameters:
request
- the request, to obtain the executed methodresponse
- the response, to obtain the status code
-
execute
public HttpResponse execute(HttpRequest request, HttpClientConnection conn, HttpContext context) throws java.io.IOException, HttpException
Sends the request and obtain a response.- Parameters:
request
- the request to execute.conn
- the connection over which to execute the request.- Returns:
- the response to the request.
- Throws:
java.io.IOException
- in case of an I/O error.HttpException
- in case of HTTP protocol violation or a processing problem.
-
closeConnection
private static void closeConnection(HttpClientConnection conn)
-
preProcess
public void preProcess(HttpRequest request, HttpProcessor processor, HttpContext context) throws HttpException, java.io.IOException
Pre-process the given request using the given protocol processor and initiates the process of request execution.- Parameters:
request
- the request to prepareprocessor
- the processor to usecontext
- the context for sending the request- Throws:
java.io.IOException
- in case of an I/O error.HttpException
- in case of HTTP protocol violation or a processing problem.
-
doSendRequest
protected HttpResponse doSendRequest(HttpRequest request, HttpClientConnection conn, HttpContext context) throws java.io.IOException, HttpException
Send the given request over the given connection.This method also handles the expect-continue handshake if necessary. If it does not have to handle an expect-continue handshake, it will not use the connection for reading or anything else that depends on data coming in over the connection.
- Parameters:
request
- the request to send, alreadypreprocessed
conn
- the connection over which to send the request, already establishedcontext
- the context for sending the request- Returns:
- a terminal response received as part of an expect-continue
handshake, or
null
if the expect-continue handshake is not used - Throws:
java.io.IOException
- in case of an I/O error.HttpException
- in case of HTTP protocol violation or a processing problem.
-
doReceiveResponse
protected HttpResponse doReceiveResponse(HttpRequest request, HttpClientConnection conn, HttpContext context) throws HttpException, java.io.IOException
Waits for and receives a response. This method will automatically ignore intermediate responses with status code 1xx.- Parameters:
request
- the request for which to obtain the responseconn
- the connection over which the request was sentcontext
- the context for receiving the response- Returns:
- the terminal response, not yet post-processed
- Throws:
java.io.IOException
- in case of an I/O error.HttpException
- in case of HTTP protocol violation or a processing problem.
-
postProcess
public void postProcess(HttpResponse response, HttpProcessor processor, HttpContext context) throws HttpException, java.io.IOException
Post-processes the given response using the given protocol processor and completes the process of request execution.This method does not read the response entity, if any. The connection over which content of the response entity is being streamed from cannot be reused until
EntityUtils.consume(org.apache.http.HttpEntity)
has been invoked.- Parameters:
response
- the response object to post-processprocessor
- the processor to usecontext
- the context for post-processing the response- Throws:
java.io.IOException
- in case of an I/O error.HttpException
- in case of HTTP protocol violation or a processing problem.
-
-