HttpAsyncRequestProducer is a callback interface whose methods
get invoked to generate an HTTP request message and to stream message
content to a non-blocking HTTP connection.

Repeatable request producers capable of generating the same request
message more than once can be reset to their initial state by calling
the resetRequest() method, at which point request producers are
expected to release currently allocated resources that are no longer needed
or re-acquire resources needed to repeat the process.

produceContent

Invoked to write out a chunk of content to the ContentEncoder.
The IOControl interface can be used to suspend output event
notifications if the producer is temporarily unable to produce more content.

When all content is finished, the producer MUST call
ContentEncoder.complete(). Failure to do so may cause the entity
to be incorrectly delimited.

Please note that the ContentEncoder object is not thread-safe and
should only be used within the context of this method call.
The IOControl object can be shared and used on other thread
to resume output event notifications when more content is made available.

isRepeatable

resetRequest

Invoked to reset the producer to its initial state. Repeatable request
producers are expected to release currently allocated resources that are
no longer needed or re-acquire resources needed to repeat the process.