added body() and hasBody() to request