Move reading of the request into HttpRequest
caller of read() specifies how much data they want, not buf size