In fact, the body of a request in a hyper crate is a stream. You can't get access to the full body immediately, but you can read incoming chunks, write them to a vector, and use the resulting data set as a single object.
Since we're using an asynchronous approach, we can't block the current thread while we read the stream to the end. This is because it would block the thread and cause the program to stop working, because the same thread is used for polling streams.